4

この UDF が で終了する理由がわかりませんcurrentInput = inputArray(i)。関連するコードは次のとおりです。

Function OrderRange(inputRange As Range) As Variant

    Dim length As Integer
    inputHeight = inputRange.Count

    Dim inputArray As Variant
    inputArray = inputRange

    Dim strippedArray() As Variant
    ReDim strippedArray(0 To (inputHeight - 1))

    Dim currentInput As String

    Dim i As Integer

    For i = 0 To (inputHeight - 1)

        currentInput = inputArray(i)
        '...computations on currentInput...'
        strippedArray(i) = currentInput
    Next i
    OrderRange = strippedArray
End Function

デバッガーは到達currentInput = inputArray(i)しますが、次の行に移動すると、関数が終了し、#VALUE!関数を呼び出すセルにエラーが入力されます。これが特定の質問であることはわかっていますが、それは一般的な問題であると確信しており、この元の投稿を編集して、一般的な問題が何であるかを反映させます.

編集:これは、バリアント配列への範囲の割り当てに関する問題です。

4

1 に答える 1

7

範囲と等しく設定して作成されたバリアント配列は、幅が1列または行しかない場合でも、2次元になります。したがって、A1:A10を使用して関数を呼び出すと、10*1の配列が得られます。また、ディメンションの下限はゼロではなく1になります。したがって、次のようなことを行う必要があります。

For i = 1 To (inputHeight)
    currentInput = inputArray(i, 1)

また、すべての変数を宣言するように通知されるように、OptionExplicitを使用する必要があります。InputHeightが宣言されることはありません。

于 2012-06-28T04:41:17.490 に答える