0

次の手順を実行して、Excelの負の値と数値以外の値を除いて、値の範囲の中央値を取得できます。

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

上記を達成する方法ですが、vbaExcelでは?

データには、数値、「N / A」フレーズ、および負の値を指定できます。

例:12、2、-4、N / A、3、4

4

1 に答える 1

1

非常に迅速な解決策として、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
于 2012-10-16T13:04:19.853 に答える