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-我假设这是原始问题中的一个输入错误。所有这些组都至少有一个修饰符。