Developer

【ExcelVBA】プロシージャの引数1
2021.04.30
Lv1

【ExcelVBA】プロシージャの引数1

プロシージャの引数1

今回はプロシージャの引数(ひきすう)について詳しく紹介していきます。
引数はプロシージャの呼び出し元から呼び出し先へデータを渡すときに使用するものです。プロシージャはSubでもFunctionでもどちらでも使用することができます。

引数が使えると何が便利なのでしょうか。次の図を見てください。
呼び出し元プロシージャから2回同じプロシージャを呼び出すシチュエーションを考えてみましょう。

このとき引数がない場合は、戻り値で同じ結果しか返すことができませんが、引数があることで異なる結果を返すことができるようになります。
1回目は引数xを渡し結果として「2x+1」を、2回目は引数yを渡し結果として「2y+1」を戻り値として取得しています。xとyは違う値とすると、結果も変わりますね。
このように同じプロシージャでも結果を変えることが可能で、うまくプロシージャを設計するといろいろなところで流用可能な汎用的なプロシージャにすることができます。
「別のプロシージャを呼び出す」のところでも説明したとおり、プロシージャを2つ以上に分割するメリットの1つが「再利用可能」でした。

前回紹介したプログラムと同じものを再掲しましょう。
一点だけ変更しました。fプロシージャの引数を「i」から「a」に変更しています。これ以外はすべて同じです。

Sub VBA基礎第21回_1()
    Dim i As Integer
    Dim x As Integer
    
    For i = 1 To 5

        x = f(i)
        Debug.Print x
        
    Next
    
    MsgBox "完了", vbInformation
    
End Sub

Function f(a As Integer) As Integer

    f = a * 2 + 1
    
End Function

このプログラムは呼び出し元プロシージャ「VBA基礎第21回_1」で5回ループして、そのループカウンタ「i」を引数としてFunctionプロシージャを呼び出しています。
つまり、同じプロシージャを5回呼び出しています。結果としては、次のようにイミディエイトウィンドウに表示されているはずです。
5回の結果がそれぞれ違う値となっていることが分かりますね。

引数を「i」から「a」に変更しましたが、このように引数名は変数名と同じく自由に決めることができます。修正前は呼び出し元と呼び出し先の引数がどちらも「i」になっていましたが、このように引数名は別の名前にした方がわかりやすいかもしれません。
呼び出し元の「i」がFunctionプロシージャを呼び出した瞬間に「a」にコピーされる仕組みになっています。
Function内では「i」は使用することができません。これは「i」のスコープ(変数の有効範囲)はそのプロシージャ内に限定されているためです。
(Functionプロシージャは別のプロシージャになるため、「i」のスコープ外となり使用できない)

まとめ

プロシージャに対する入力は「引数」という形で実現する。
引数はプロシージャを汎用的に使用できるようにするためのキーポイントとなる。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

引数はプロシージャの○○○から○○○へデータを渡すときに使用するものである。
プロシージャを呼び出し方法によって結果を変えたり、他のプログラムへの○○○可能な汎用設計にするには引数を使うことにより実現できる。

答え

引数はプロシージャの呼び出し元から呼び出し先へデータを渡すときに使用するものである。
プロシージャを呼び出し方法によって結果を変えたり、他のプログラムへの再利用可能な汎用設計にするには引数を使うことにより実現できる。

次回は、プロシージャの引数2です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次