VBA で myFunction(x,y,z) という形式の関数を設計しています。ここで、z はテーブルで、x は列見出しの値を取ることができます。関数の一部として、z の行数を見つける必要があります。
どこを見ても の使用length = z.Rows.Count
が示唆されているように、これに問題がありますが、この値を ( set のようにmyFunction = length
) 出力しようとすると、 VALUE エラーが発生します。ただし、myFunction = a
直接使用しない出力を行うlength
と (動作するようになると、最終的に IF ステートメントの一部になります)、関数は正常に動作します。私のコードは以下の通りです:
Public Function myFunction(x As String, y As Double, z As Range) As Double
Dim upper_threshold As Double
Dim lower_threshold As Double
Dim a As Double
Dim rates As Variant
Dim u As Byte
Dim l As Byte
Dim r As Byte
Dim length As Byte
a = 0
u = 2
l = 1
rates = Application.WorksheetFunction.Index(z, 1, 0)
r = Application.WorksheetFunction.Match(x, rates, 0)
length = z.rows.Count
upper_threshold = z(u, 1)
Do While y > upper_threshold
u = u + 1
l = l + 1
upper_threshold = z(u, 1)
lower_threshold = z(l, 1)
If y < upper_threshold Then
a = a + z(l, r) * (y - lower_threshold)
Else
a = a + z(l, r) * (upper_threshold - lower_threshold)
End If
Loop
myFunction = a
End Function
テストするために、別の関数も作成しました。
Public Function myRows(myTable As Range) As Double
myRows = myTable.rows.Count
End Function
これは単独では問題なく動作しますが、他の関数内で使用しようとすると、依然として VALUE エラーが発生します。考えられるすべてのタイプとして長さを宣言しようとしましたが、役に立たないようです。
誰が何が起こっているかを見ることができますか?
編集:私は明らかに自分自身をはっきりさせていません。長さを参照する 2 行のない関数は、意図したとおりに機能します。ただし、機能を向上させるためにコードを少し追加する必要があります。これには、テーブル z の行数の計算が含まれます。ここに示す 2 行を関数に追加すると、出力に影響しないため、機能し続けます。ただし、出力を長さを表示するように設定すると、つまり、最後から 2 番目の行をmyFunction = length
それに変更すると、VALUE エラーが発生します。これにより、私が見る限り、2つのオプションが残ります.プログラム内の他の何かがこれらの2行に影響を与えているか(構文の衝突など)、またはlength
そのように出力できると仮定するだけで間違いを犯しています.