我可以执行以下操作来获取一系列值的中位数,不包括excel中的负数和非数字值:
=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))
如何完成上述但是在vba excel中?
数据可以是,数字,“N / A”短语和负值,
例如: 12,2,-4,N / A,3,4,
答案 0 :(得分:1)
作为一种非常快速的解决方案,您可以直接在vba中使用工作表函数。
这将是您的公式为vba
的示例Dim myValue As Variant
Dim myRange As Range
Set myRange = Range("B1:B8")
With Application.WorksheetFunction
myValue = 0
If .IsNumber(myRange(1, 1).Value) Then
If myRange(1, 1) > 0 Then
myValue = .Round(myRange(1, 1), 2)
End If
End If
Debug.Print .Median(myValue)
End With
然而,我不认为,这是你的目标。也许你可以给出一个更好的数据示例,然后对其进行测试。
编辑:这非常好用
Sub jookCalc()
Dim myValues() As Variant
Dim myRange() As Variant
Dim i As Long
myRange = Range("B1:B8")
With Application.WorksheetFunction
ReDim myValues(LBound(myRange, 1) To LBound(myRange, 1))
For i = LBound(myRange, 1) To UBound(myRange, 1)
If .IsNumber(myRange(i, 1)) Then
If myRange(i, 1) > 0 Then
myValues(UBound(myValues)) = .Round(myRange(i, 1), 2)
ReDim Preserve myValues(LBound(myRange, 1) To UBound(myValues) + 1)
End If
End If
Next i
Debug.Print .Median(myValues)
End With
End Sub