次の手順を実行して、Excelの負の値と数値以外の値を除いて、値の範囲の中央値を取得できます。
=MEDIAN(IF(ISNUMBER(B1:B8),IF(B1:B8>0,ROUND(B1:B8,2))))
上記を達成する方法ですが、vbaExcelでは?
データには、数値、「N / A」フレーズ、および負の値を指定できます。
例:12、2、-4、N / A、3、4
非常に迅速な解決策として、vbaで直接worksheet-functionsを使用できます。
これは、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