Excel VBA 処理の一部をサブルーチン化するCallステートメント

スポンサーリンク
スポンサーリンク

処理の一部をサブルーチン化する方法

プロシージャは単体で実行するだけでなく
ほかのプロシージャから呼び出して実行することができます。

いくつもの処理を含む1つの大きなプロシージャを作成するより
処理ごとの1つの小さなプロシージャ(サブルーチン)を作成しておき
呼び出して実行するようにすれば
それぞれのプロシージャが簡潔になり、メンテナンスも容易になります。

Call【コール】ステートメント

任意のプロシージャ内から
他のプロシージャを呼び出して実行するには
Call【コール】ステートメントを使用します。

Call【コール】ステートメントの書式

[]内は諸略可能です。
[Call] name ([引数リスト])


設定値の説明

  • Call【コール】(省略可)
    Call【コール】キーワードを指定します。
    Call【コール】キーワードは省略してもプロシージャを
    呼び出すことができますが、キーワードを使用して
    明示的にサブルーチンを呼び出したほうがわかりやすくなります。
  • name【ネーム】(必須)
    呼び出すプロシージャの名前を指定します。
  • 引数リスト(省略可)
    プロシージャに引き渡す変数リスト、配列、または式のいずれかを指定します。
    複数指定するときは、カンマ (,) で区切ります。

コード例

Sub 親プロシージャ()
Call サブルーチン1
Call サブルーチン2
End Sub

Private Sub サブルーチン1()
Range("B2").Value = "Excel"
End Sub

Private Sub サブルーチン2()
Range("B2").Interior.Color = RGB(255, 0, 0)
End Sub

コードの解説

親プロシージャで
Call【コール】ステートメントを使用して
サブルーチン1とサブルーチン2プロシージャを
呼び出して各プロシージャを実行します。
サブルーチン部分は
Private【プライベート】ステートメント利用して
作成しておくと、「マクロ」ダイアログボックスに
表示されないマクロになります。

実行結果


サブルーチンに引数を設定して呼び出す方法

プロシージャに引数を設定するには
プロシージャ名の後ろのカッコの中に
引数名とデータ型をセットにして記述します。

カッコの中の表記は
Dim【デム】ステートメントで変数を宣言するときのようになります。

設定した引数は、プロシージャ内で変数のように扱えます。
また、引数を指定してプロシージャを呼び出すには
Callステートメントの引数名の後ろにカッコを付け
カッコ内に渡したい引数の値を記述します。

コード例

Sub 親プロシージャ2()
Call サブルーチン3(Range("A1:C3"), "Excel")
Call サブルーチン4(Range("A1:C3"))
End Sub

Private Sub サブルーチン3(範囲 As Range, 文字列 As String)
範囲.Value = 文字列
End Sub

Private Sub サブルーチン4(範囲 As Range)
範囲.Interior.Color = RGB(0, 255, 0)
End Sub

コードの解説

2行目
【Call サブルーチン3(Range(“A1:C3”), “Excel”)】

Call【コール】ステートメントを使用して
Private Sub【プライベートサブ】プロシージャの
「サブルーチン3」を呼び出します。
引数に「サブルーチン3」に渡す値
セル範囲A1セル~C3セルと
文字列の「Excel」を設定します。


3行目
【Call サブルーチン4(Range(“A1:C3”))】

Call【コール】ステートメントを使用して
Private Sub【プライベートサブ】プロシージャの
「サブルーチン4」を呼び出します。
引数に「サブルーチン4」に渡す値
セル範囲A1セル~C3セルを設定します。


5行目
【Private Sub サブルーチン3(範囲 As Range, 文字列 As String)】

サブルーチンとなるプロシージャを
「マクロ実行」のダイアログボックスに表示されないように
Private【プライベート】ステートメントを利用して作成します。
プロシージャ名の後にカッコをを付けて
親プロシージャのCall【コール】ステートメントの引数に設定した値を
受け取ります。
変数名のように任意の名前と受け取るデータ型を設定します。


6行目
【範囲.Value = 文字列】

Call【コール】ステートメントの引数から受け取った
A1セル~C3セルのセル範囲が格納された「範囲」に
「Excel」の文字列が格納された「文字列」を設定します。


8行目
【Private Sub サブルーチン4(範囲 As Range)】

サブルーチンとなるプロシージャを
「マクロ実行」のダイアログボックスに表示されないように
Private【プライベート】ステートメントを利用して作成します。
プロシージャ名の後にカッコをを付けて
親プロシージャのCall【コール】ステートメントの引数に設定した値を
受け取ります。
変数名のように任意の名前と受け取るデータ型を設定します。


9行目
【範囲.Interior.Color = RGB(0, 255, 0)】

Call【コール】ステートメントの引数から受け取った
A1セル~C3セルのセル範囲が格納された「範囲」に
セルの背景を表す
Interior【インテリア】オブジェクトの
Color【カラー】プロパティにRGB関数で色を設定します。


実行結果


引数の「参照渡し」と「値渡し」

VBAでは通常、引数を「参照渡し」という方式で渡します。
「参照渡し」とは、引数の値そのものを渡すのではなく
引数を参照している形になり、引数として変数を渡し
呼び出した側で値を変更すると
呼び出し元の変数の値も変化してしまします。

参照渡しのコード例

Sub 親プロシージャ3()
Dim 文字列 As String
文字列 = "Excel"
Call サブルーチン5(文字列)
MsgBox 文字列
End Sub
Private Sub サブルーチン5(文字列 As String)
文字列 = "VBA"
End Sub

実行結果


※変数「文字列」に格納された「Excel」が
「参照渡し」により「VBA」に変更されました。


「参照渡し」に対して値のみを渡す方式を「値渡し」と呼びます。
引数を「値渡し」に設定するには
受け取る引数名をByVal【バイバル】キーワードを使用して定義します。

値渡しのコード例

Sub 親プロシージャ3()
Dim 文字列 As String
文字列 = "Excel"
Call サブルーチン5(文字列)
MsgBox 文字列
End Sub
Private Sub サブルーチン5(ByVal 文字列 As String)
文字列 = "VBA"
End Sub

コードの解説

7行目
【Private Sub サブルーチン5(ByVal 文字列 As String)】

受け取る引数名をByVal【バイバル】キーワードを使用して定義します。

実行結果


以上で
処理の一部をサブルーチン化するCallステートメント
についての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク