「また同じようなコードを書いてる。コピーして貼り付けて、少しだけ変数名を変えて……。これ、もっとスッキリまとめられないのかな? でも、配列を関数に渡すのってエラーが出そうで、なんだか難しそう……。」
そんな風に悩んだことはありませんか?
私自身も初心者の頃、配列を関数に渡そうとして「型が一致しません」というエラーを何度も経験しました。
しかし、一度「配列を関数でやり取りする方法」を習得すると、プログラミングの視界が劇的に広がります。100行あったコードが半分に集約され、修正に要する時間が10分の1に短縮されることも珍しくありません。
今回は、VBAの配列を関数でスマートに扱う方法について解説していきます。
1. 配列を関数に渡す(引数):お弁当箱を丸ごと受け渡すイメージ
プログラミングの「引数(ひきすう)」って難しい言葉ですよね。これは、「関数という調理場に、材料となるデータを届けること」だとイメージしてみてください。
通常の変数を渡す操作が「りんご1個」を手渡すようなものであるのに対し、配列を渡す操作は、複数の具材が詰まった「お弁当箱」を丸ごと手渡すようなものと言えます。
【コピペOK】配列を引数にするコード
このコードは、受け取った配列のすべての要素を2倍にする関数です。
Sub MainProc()
Dim myData(2) As Long
myData(0) = 10
myData(1) = 20
myData(2) = 30
' 関数に配列を丸ごと渡す
Call DoubleArray(myData)
' 結果を確認(20, 40, 60 になっています)
MsgBox myData(0) & ", " & myData(1) & ", " & myData(2)
End Sub
' 引数として配列を受け取る関数
Sub DoubleArray(ByRef targetArray() As Long)
Dim i As Long
' LBoundとUBoundで配列の最初から最後までループ
For i = LBound(targetArray) To UBound(targetArray)
targetArray(i) = targetArray(i) * 2 ' 中身を2倍にする
Next i
End Sub
コードのポイント:
関数の引数部分に「targetArray()」と記述することが重要になります。末尾にカッコを付与することで、VBAに対して「これは単一の変数ではなく配列である」と明確に伝える役割を果たします。
2. 配列を戻り値にする:調理済みのオードブルを受け取るイメージ
続いて、関数内部で生成した配列を、呼び出し元のプログラムへ戻す方法を確認していきましょう。この仕組みを「戻り値(もどりち)」と呼びます。
実例:配列を戻り値として取得するサンプルコード
この関数は、1から指定した数までの連番が入った配列を新しく作って返してくれます。
Sub TestReturn()
Dim result() As Long
' 関数から「完成した配列」を受け取る
result = CreateNumbers(5)
' 5個目の要素(インデックス4)を表示
MsgBox "5番目の数字は " & result(4) & " です"
End Sub
' 戻り値として配列を返す関数
Function CreateNumbers(ByVal n As Long) As Long()
Dim temp() As Long
ReDim temp(n - 1) ' n個分の部屋を用意
Dim i As Long
For i = 0 To n - 1
temp(i) = i + 1 ' 1, 2, 3... と数字を入れる
Next i
' 関数名に配列を代入して「返す」
CreateNumbers = temp
End Function
コードのポイント:
関数定義の最後にある型指定(As Long())にカッコを含めることが、最も大切なポイントとなります。このカッコがないと、配列を返すための正しい宣言として認識されません。
まとめ
最初は難解に思えるかもしれませんが、まずは「末尾のカッコ () を忘れない」という基本を意識してみてください。 これさえ守れば、配列は私たちの強力な武器になります。
まずは、上記のコードを自分のExcelに貼り付けて動かしてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント