0

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そのように出力できると仮定するだけで間違いを犯しています.

4

1 に答える 1

1

あなたの問題は次のとおりです。

rates = Application.WorksheetFunction.Index(z, 1, 0)

Index単一の行または列のみを受け入れます。それ以外の場合はVALUEエラーが発生します。

于 2013-08-28T13:33:06.737 に答える