Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 计算数据的中值,其中某些值包含<&引用;_Vba_Excel - Fatal编程技术网

Vba 计算数据的中值,其中某些值包含<&引用;

Vba 计算数据的中值,其中某些值包含<&引用;,vba,excel,Vba,Excel,我需要计算一组测量值的中位数,在某些情况下测量值,在某些情况下,值低于检测值(用“表示,我使用的是: Public Function DoAvg(rng As Range) DoAvg = Parse(rng, "Average") End Function Public Function DoMedian(rng As Range) DoMedian = Parse(rng, "Median") End Function 'This does the work... Privat

我需要计算一组测量值的中位数,在某些情况下测量值,在某些情况下,值低于检测值(用“表示,我使用的是:

Public Function DoAvg(rng As Range)
  DoAvg = Parse(rng, "Average")
End Function

Public Function DoMedian(rng As Range)
  DoMedian = Parse(rng, "Median")
End Function


'This does the work...
Private Function Parse(rng As Range, CalcType As String)

Dim rv, arr() As Single, mods As String, i As Long
Dim c As Range
Dim tmp, m

  For Each c In rng.Cells
    tmp = Replace(Trim(c.Value), " ", "")
    If tmp Like "<*" Or tmp Like ">*" Then
        m = Left(tmp, 1)
        If Not InStr(mods, m) > 0 Then mods = mods & m
        tmp = Right(tmp, Len(tmp) - 1)
    End If

    If IsNumeric(tmp) And tmp <> "" Then
      i = i + 1
      ReDim Preserve arr(1 To i)
      arr(i) = tmp
    End If
  Next c

  If i > 1 Then
      rv = CallByName(Application.WorksheetFunction, CalcType, VbGet, arr)
      Parse = IIf(mods <> "", mods, "") & rv
  Else
      Parse = ""
  End if

End Function
公共函数DoAvg(rng作为范围)
DoAvg=解析(rng,“平均”)
端函数
公共职能部门(rng As范围)
DoMedian=解析(rng,“中值”)
端函数
“这就行了。。。
私有函数解析(rng作为范围,CalcType作为字符串)
Dim rv,arr()为单个,mods为字符串,i为长度
调光范围
暗tmp,m
对于每个c In rng.单元格
tmp=替换(修剪(c.值),“”,“”)
如果tmp像“*”那么
m=左(tmp,1)
如果仪表(mods,m)>0,则mods=mods&m
tmp=右侧(tmp,Len(tmp)-1)
如果结束
如果是数字(tmp)和tmp“”,则
i=i+1
ReDim保留arr(1到i)
arr(i)=tmp
如果结束
下一个c
如果i>1,那么
rv=CallByName(Application.WorksheetFunction、CalcType、VbGet、arr)
解析=IIf(mods“”、mods“”)和rv
其他的
Parse=“”
如果结束
端函数

一种方法是将修饰符从数字中分割成单独的列,然后只对数字进行计算。否则,您可以编写VBA函数来进行计算,从而去除修饰符然后将它们重新添加到最后的计算中。@brettdj-我假设这是原始问题中的一个输入错误。所有这些组都至少有一个修饰符。