Excel VBA Join関数のエラーの対象方法「プロシージャの呼び出し、または引数が不正です。」

VBA関数

今回は文字列を結合するJoin関数を使用した際に、1次元配列を作成してJoin関数の部分で「プロシージャの呼び出し、または引数が不正です。」というエラーが出てしまったときの対処方法をご説明します。

今回は紹介する、エラーになってしまうケース以外でエラーとなる場合は、この記事では対処できません。

Join関数の使い方については「Join関数(結合)の使い方」をご覧ください。

1.Join関数でエラーが発生するケース

まずはJoin関数で次のようなエラーが発生するケースをいくつかご紹介します。

エラーになってしまう方は次のコードが当てはまる場合には、解決できるかもしれません。

サンプルデータとして次のようなデータを配列に格納してJoin関数を使用します。

配列にRangeを直接格納する

1列であっても直接セル範囲を配列に格納してJoinするとエラーになります。

Sub Sample1()

Dim i       As Long
Dim MyArray As Variant

MyArray = Range(Cells(1, 1), Cells(10, 1))

MsgBox Join(MyArray, "_")

End Sub

ループで1次元配列を作成する

配列にループで格納するときに、配列の領域を「(0 To 9, 0 To 0)」と指定した場合エラーとなります。

Sub Sample2()

Dim i         As Long
Dim MyArray() As String

ReDim MyArray(0 To 9, 0 To 0)

For i = 1 To 10

    MyArray(i - 1, 0) = Cells(i, 1)

Next i

MsgBox Join(MyArray, "_")

End Sub

2.エラーの出ない配列の格納方法

Join関数は1次元の配列に格納しないとエラーになります。

1列のセル範囲を直接格納する場合も、「ReDim」で領域を指定する場合に「(0 To 9, 0 To 0)」のように、0 To 0で1次元を指定しているつもりでもエラーになります。

上記のような記述でエラーとなる場合は次のようにコードを記述する事でエラーを回避出来ます。

「ReDim MyArray(0 To 9)」と列の領域指定を削除しました。

Sub Sample3()

Dim i As Long
Dim MyArray() As String

ReDim MyArray(0 To 9)

For i = 1 To 10

    MyArray(i - 1) = Cells(i, 1)

Next i

MsgBox Join(MyArray, "_")

End Sub
タイトルとURLをコピーしました