5

数値に評価されるワークシートのセル範囲に数式があります。関数に渡された範囲から VBA の数値を取得するにはどうすればよいですか?

ワークシートの列 A の最初の 10 行に rand() が含まれていて、それを引数として関数に渡しているとしましょう...

public Function X(data as Range) as double

    for c in data.Cells
        c.Value    'This is always Empty
        c.Value2   'This is always Empty
        c.Formula  'This contains RAND()
    next

end Function

セルから関数を呼び出します...

=X(a1:a10)

0.62933645 などのセル値を取得するにはどうすればよいですか?

エクセル2003、VB6

4

3 に答える 3

6

VBA (Excel 2003) から実行すると、次のコードが機能します。

Public Function X(data As Range) As Double

For Each c In data.Cells
    a = c.Value     'This works
    b = c.Value2    'This works too (same value)
    f = c.Formula   'This contains =RAND()
Next

End Function

a と b は同じで、渡したものと同じです (これは、Rand() を含むセルの範囲です)。ここで他に何が起こっているのかわかりません。

あはは!X を設定する必要がありますね。この関数に何を期待しているのか正確にはわかりませんが、X (関数の名前) を返してほしい値に設定する必要があります。次の行を追加します。

X = a
于 2009-05-23T12:44:34.157 に答える
2

あなたが投稿したレイアウトを使用して問題を再現することはできません。投稿されたコードにいくつかの構文エラーがあることに気付きました (つまり、「for」は「for each」である必要があります)。しかし、 =RAND() を A1:A10 と =X(A1:A10) に入れると、これで問題なく戻りました。

Public Function X(data As Range) As Double
    Dim c As Excel.Range
    Dim sum As Double
    For Each c In data.Cells
        sum = sum + c.Value
    Next
    X = sum
End Function

ただし、あなたがブラッシュアップした他のいくつかの質問について、もう少し詳しく説明します。次のように結果の数式を評価できます。

Public Function X(data As Range) As Double
    Dim c As Excel.Range
    Dim sum As Double
    For Each c In data.Cells
        sum = sum + Excel.Evaluate(c.Formula)
    Next
    X = sum
End Function

しかし、これは基本的に同じ値を2回計算しているため、一般的にはしたくないでしょう。

于 2009-05-27T08:54:41.440 に答える
0

値をリクエストする前に、必ず計算を行ってください。

マクロを高速化するには、次のようなものがよく実行されます。

'Set Reasonable default
Application.CutCopyMode = False
Application.ScreenUpdating = False
Application.Interactive = False
Application.Calculation = xlCalculationManual

この状態では、値が使用可能になる前に計算を強制する必要があります。

Public Function X(data As Range) As Double
    'You may need the following as well
    'Application.Calculate
    Dim c As Range
    For Each c In data.Cells
        c.Calculate
        c.Value    'This is now has a value
        c.Value2   'This is now has a value
        c.Formula  'This contains RAND()
    Next
End Function
于 2010-03-17T01:13:48.977 に答える