我可以做以下獲得中位數的值的範圍,不包括在Excel負和非數字值:平均剔除負值和非數值優於
=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))
如何完成上述但在VBBA Excel?
數據可以是,數字, 「N/A」 的短語,和負值,
例如: 12,2,-4,N/A,3,4
我可以做以下獲得中位數的值的範圍,不包括在Excel負和非數字值:平均剔除負值和非數值優於
=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))
如何完成上述但在VBBA Excel?
數據可以是,數字, 「N/A」 的短語,和負值,
例如: 12,2,-4,N/A,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
一些與這個公式並不加起來,它不計算值B1位數:B8,你似乎打算做的事。 – Jook