0

我可以执行以下操作来获取一系列值中的中位数,不包括 excel 中的负值和非数字值:

=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))

如何在 vba excel 中完成上述操作?

数据可以是数字、“N/A”短语和负值,

示例:12、2、-4、不适用、3、4

4

1 回答 1

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
于 2012-10-16T13:04:19.853 回答