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