今回は文字列を結合する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