我可以执行以下操作来获取一系列值中的中位数,不包括 excel 中的负值和非数字值:
=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))
如何在 vba excel 中完成上述操作?
数据可以是数字、“N/A”短语和负值,
示例:12、2、-4、不适用、3、4
作为一个非常快速的解决方案,您可以直接在 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