【VBA】サブルーチンに引数を渡す方法|再利用性の高いコードを書くための基本

目次

はじめに

VBAの処理をサブルーチン(部品化されたマクロ)に分割するとコードが整理されますが、そのままだと「特定のセル範囲」や「固定の文字列」に対してしか処理を実行できません。

サブルーチンをよりパワフルで再利用可能な「万能な部品」にするために不可欠なのが、「引数(ひきすう)」です。引数を使うと、サブルーチンを呼び出す側(親マクロ)から、処理に必要な具体的なデータ(どのセル範囲を対象にするか、など)を、サブルーチン(子マクロ)に渡すことができます。

この記事では、サブルーチンに引数を渡すための基本的な構文と、そのメリットを分かりやすく解説します。


引数を持つサブルーチンへの値の渡し方

この例では、指定されたセル範囲に、指定されたテキストを書き込み、書式を設定する、再利用可能なサブルーチン FormatCell を作成します。

完成コード

' === メインの実行マクロ ===
Sub CreateFormattedHeader()

    ' --- 引数を順番通りに渡す(位置引数) ---
    ' 第1引数にRangeオブジェクト, 第2引数に文字列を渡す
    Call FormatCell(Worksheets("Sheet1").Range("B2"), "売上")
    
    ' --- 引数名を指定して渡す(キーワード引数) ---
    ' 順序を問わず、どの引数にどの値を渡すかを明記できる
    Call FormatCell(targetText:="利益", targetRange:=Worksheets("Sheet1").Range("D2"))
    
End Sub


' --- 引数を受け取るサブルーチン ---
' (targetRange As Range, targetText As String) の部分で引数を定義
Private Sub FormatCell(targetRange As Range, targetText As String)

    ' 渡された引数を使って処理を実行
    With targetRange
        .Value = targetText
        .Font.Bold = True
        .Interior.Color = RGB(220, 230, 241) '薄い青色
    End With
    
End Sub

コードの解説

Private Sub FormatCell(targetRange As Range, targetText As String)

これが、引数を受け取るサブルーチンの定義です。

  • Sub の後の () の中に、変数名 As データ型 の形式で、受け取りたい引数をカンマ区切りで定義します。
  • ここで定義された targetRangetargetText は、この FormatCell サブルーチン内でのみ使える特別な変数(仮引数)として機能します。

Call FormatCell(Worksheets("Sheet1").Range("B2"), "売上")

これは「位置引数」を使った、最も一般的な呼び出し方です。

  • FormatCell を呼び出す際に、() の中に渡したい値を、サブルーチンの定義と同じ順番で記述します。
  • 1番目の Range("B2")targetRange に、2番目の "売上"targetText に渡されます。

Call FormatCell(targetText:="利益", targetRange:=...

これは「キーワード引数」を使った呼び出し方です。

  • 引数名:=値 の形式で、どの引数にどの値を渡すかを明示的に指定します。
  • キーワード引数を使うと、サブルーチンで定義された引数の順番を気にする必要がなく、コードがより読みやすくなるというメリットがあります。

引数を使うメリット

  • 再利用性の劇的な向上: FormatCell サブルーチンは、どんなセル範囲にも、どんなテキストにも対応できる、汎用的な「書式設定ツール」になりました。
  • コードの簡潔化: もし引数を使わなければ、”売上”用の書式設定マクロと”利益”用の書-式設定マクロを、別々に作る必要があったかもしれません。
  • 保守性の向上: 書式設定のロジック(例えば、背景色)を変更したい場合、FormatCell の中だけを修正すれば、このサブルーチンを呼び出している全ての箇所に修正が反映されます。

まとめ

今回は、サブルーチンに引数を渡すことで、コードをより柔軟で再利用しやすくする方法を解説しました。

  • サブルーチンを定義する際に、Sub マクロ名(引数1 As 型, 引数2 As 型) のように受け皿を用意する。
  • 呼び出す側から、Call マクロ名(値1, 値2) のように具体的な値を渡す
  • キーワード引数 (引数名:=値) を使うと、順番を気にせず渡せてコードが読みやすくなる。

引数は、VBAプログラミングにおける最も基本的かつ重要な概念の一つです。効果的に活用することで、コードの品質を大きく向上させることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次