web-dev-qa-db-ja.com

VBAの関数に配列を渡す方法は?

引数として配列を受け入れる関数を作成しようとしています。配列には、任意の数の要素を含めることができます。

Function processArr(Arr() As Variant) As String
    Dim N As Variant  
    dim finalStr as string      
    For N = LBound(Arr) To UBound(Arr)
        finalStr = finalStr & Arr(N)
    Next N
    processArr = finalStr
End Function

関数を呼び出す方法は次のとおりです。

Sub test()
    Dim fString as string
    fString = processArr(Array("foo", "bar"))
End Sub

次のエラーが表示されます:

コンパイルエラー:型の不一致:配列またはユーザー定義型が必要です。

何が間違っていますか?

25
user2395238

これは不要に思えますが、VBAは奇妙な場所です。配列変数を宣言し、Array()を使用して変数を設定し、変数を関数に渡すと、VBAは満足します。

_Sub test()
    Dim fString As String
    Dim arr() As Variant
    arr = Array("foo", "bar")
    fString = processArr(arr)
End Sub
_

また、関数processArr()は次のように書くこともできます。

_Function processArr(arr() As Variant) As String
    processArr = Replace(Join(arr()), " ", "")
End Function
_

あなたは全体の簡潔さの事にいる場合。

26
JNevill

これに宣言を変更した後、あなたの関数は私のために働いた...

Function processArr(Arr As Variant) As String

このようなParamArrayを考慮することもできます...

Function processArr(ParamArray Arr() As Variant) As String
    'Dim N As Variant
    Dim N As Long
    Dim finalStr As String
    For N = LBound(Arr) To UBound(Arr)
        finalStr = finalStr & Arr(N)
    Next N
    processArr = finalStr
End Function

そして、このような関数を呼び出して...

processArr("foo", "bar")
20
HansUp