在vba excel中排除负数和非数字值的中位数

时间:2012-10-16 12:27:37

标签: vba excel-vba excel

我可以执行以下操作来获取一系列值的中位数,不包括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,

1 个答案:

答案 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