Warning: The magic method InvisibleReCaptcha\MchLib\Plugin\MchBasePublicPlugin::__wakeup() must have public visibility in /home/c3541351/public_html/guakw.info/wp-content/plugins/invisible-recaptcha/includes/plugin/MchBasePublicPlugin.php on line 37
【脱・初心者】VBA配列を関数で操るコツ!保守性が向上する「データの受け渡し方」  | ぐー@高配当株ブログ

【脱・初心者】VBA配列を関数で操るコツ!保守性が向上する「データの受け渡し方」 

【業務効率化】VBA
スポンサーリンク

「また同じようなコードを書いてる。コピーして貼り付けて、少しだけ変数名を変えて……。これ、もっとスッキリまとめられないのかな? でも、配列を関数に渡すのってエラーが出そうで、なんだか難しそう……。」

そんな風に悩んだことはありませんか?

私自身も初心者の頃、配列を関数に渡そうとして「型が一致しません」というエラーを何度も経験しました。 

しかし、一度「配列を関数でやり取りする方法」を習得すると、プログラミングの視界が劇的に広がります。100行あったコードが半分に集約され、修正に要する時間が10分の1に短縮されることも珍しくありません。 

今回は、VBAの配列を関数でスマートに扱う方法について解説していきます。

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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