教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 構文】Call文(他のプロシージャ呼び出し)の使い方を知りたいです。教えて!

f:id:m_kbou:20201126153231p:plain

プロシージャの中で他のプロシージャを呼び出したい時にはCall文を使います。Call文は、Call先のSubやFunctionプロシージャに制御を渡し、プロシージャでの処理が終了すると、Call文の次の処理に制御が移ります。このCall文の使い方について紹介します。

 

 

構文

記述方法は以下の通りとなります。

Call文の記述方法

Call [他のプロシージャ名][引数]

[説明]:

プロシージャの中で他のプロシージャを呼び出したい時には「Call[他のプロシージャ名][引数])」と記述します。[他のプロシージャ名]には呼び出すプロシージャの名前を記述します。また、[引数]には他のプロシージャに渡す値を指定する事ができます。[引数]は省略する事も可能です。内容を纏めると、「[他のプロシージャ名]で記述したプロシージャを呼び出し、呼び出したプロシージャの処理を実行して下さい。」との意味になります。

[記述例]:

Call 点数判定
Call 点数判定(点数)

 

使い方

使い方について具体的に説明していきます。

基本的な使い方

基本的な使い方について説明します。

[画面]:

f:id:m_kbou:20201126153250p:plain

※<実行>ボタンには、以下のプログラミング例が登録されています。

[プログラミング例]:

Sub サンプル()
   
    Call 点数判定
    Call メッセージ
   
End Sub

-------------------------

Sub 点数判定()
   
    If (Range("A2") >= 80) Then
        Range("B2") = "合格"
    Else
        Range("B2") = "不合格"
    End If
   
End Sub

-------------------------

Sub メッセージ()
   
    MsgBox "合否判定が終了しました。"
   
End Sub

サンプルプロシージャを実行すると「最初にCall文で点数判定プロシージャを呼び出して処理を実行します。点数判定プロシージャの処理が終了すると、またサンプルプロシージャに制御が戻ります。次にCall文でメッセージプロシージャを呼び出して処理を実行します。メッセージプロシージャの処理が終了すると、またサンプルプロシージャに制御が戻ります。サンプルプロシージャでは次の処理が無いため処理を終了します。」の流れとなります。処理内容は「最初に点数判定プロシージャを呼び出して点数判定の処理を実行し、A2セルに入力されている点数の値が80以上であればB2セルに”合格”を、80未満であればB2セルに”不合格”をセットして下さい。次にメッセージプロシージャを呼び出してMsgBoxで”合否判定が終了しました。”を表示して下さい。」との意味になります。

f:id:m_kbou:20210205165308p:plain

※上記ののプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

A2セルに65を入力して<実行>ボタンをクリックします。プログラム条件である80未満に一致する事から、B2セルに”不合格”が表示されます。また、”合否判定が終了しました。”のメッセージが表示されました。

f:id:m_kbou:20201126153304p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

基本的な使い方についての説明は以上です。

 

引数を指定した使い方 

引数を指定した使い方について説明します。

[画面]:

f:id:m_kbou:20201126153346p:plain

※<実行>ボタンには、以下のプログラミング例が登録されています。

[プログラミング例]:

Sub サンプル()
   
    Dim 点数 As Double
   
    点数 = Range("A2")
   
    Call 点数判定(点数)
   
End Sub

-------------------------

Sub 点数判定()
   
    If ( >= 80) Then
        Range("B2") = "合格"
    Else
        Range("B2") = "不合格"
    End If
    MsgBox "合否判定が終了しました。"
   
End Sub 

サンプルプロシージャを実行すると「変数:点数にA2セルの値をセットします。次にCall文で点数判定プロシージャを呼び出して処理を実行します。その際に引数として変数:点数の値も渡します。点数判定プロシージャでは引き渡された変数:点数の値を使用して処理を実行します。点数判定プロシージャの処理が終了すると、またサンプルプロシージャに制御が戻ります。サンプルプロシージャでは次の処理が無いため処理を終了します。」の流れとなります。処理内容は「最初に変数:点数にA2セルの値をセットします。次に点数判定プロシージャを呼び出して点数判定の処理を実行しますが、変数:点数の値も引数として渡します。点数判定プロシージャの処理では変数:点数の値が80以上であればB2セルに”合格”を、80未満であればB2セルに”不合格”をセットし、最後にMsgBoxで”合否判定が終了しました。”を表示して下さい。」との意味になります。

f:id:m_kbou:20210205165420p:plain

※上記ののプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

A2セルに85を入力して<実行>ボタンをクリックします。プログラム条件である80以上に一致する事から、B2セルに”合格”が表示されます。また、”合否判定が終了しました。”のメッセージが表示されました。

f:id:m_kbou:20201126153402p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

引数を指定した使い方についての説明は以上です。

 

おわりに

Call文の使い方について説明しました。毎回使用するプロシージャについては、部品化してCall文で呼び出す様なプログラミングをする事で、シンプルで見易いコーディングが記述できます。是非有効に活用して下さい。

 

紹介動画

youtu.be