教えて!ExcelVBA!

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

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

       f:id:m_kbou:20201126153231p:plain

プロシージャの中で他のプロシージャを呼び出したい時にはCall文を使います。Call文で呼び出された他のプロシージャ処理が終了した後は、呼び出す前のプロシージャに制御が戻ります。具体的な使い方について説明します。

 

【目次】

 

構文

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

Call文の記述方法

=======================================================================

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

=======================================================================

[説明]:

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

[記述例]:

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

 

使い方

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

基本的な使い方

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

[画面]:

f:id:m_kbou:20201126153250p:plain

※<実行>ボタンには、以下の記述例サンプルプロシージャが登録されています。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

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

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で”合否判定が終了しました。”を表示して下さい。」との意味になります。

[実行例]:

※A2セルに入力されている数値が65のため、80未満の条件に一致する事からB2セルに”不合格”が表示されました。また、”合否判定が終了しました。”のメッセージが表示されました。

f:id:m_kbou:20201126153304p:plain

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

 

引数を指定した使い方 

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

[画面]:

f:id:m_kbou:20201126153346p:plain

※<実行>ボタンには、以下の記述例サンプルプロシージャが登録されています。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

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

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で”合否判定が終了しました。”を表示して下さい。」との意味になります。

[実行例]:

※A2セルに入力されている数値が85のため、80以上の条件に一致する事からB2セルに”合格”が表示されました。また、”合否判定が終了しました。”のメッセージが表示されました。

f:id:m_kbou:20201126153402p:plain

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

 

おわりに

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