●それでは、コードを使ってCallの説明をいたします。
●メインプログラムとサブプログラムAとサブプログラムBがあります。メインプログラムは、プログラム全体の制御部分になっていて、品名・単価・数量を入力します。サブプログラムAは、単価×数量の計算を行い結果を合計に代入します。サブプログラムは、計算結果をメッセージボックスで表示します。
下表は、メインプログラムとサブプログラムへ引数の引継ぎ状況をあらわす表です。引数を使うことで、メインプログラムとサブプログラム間のデータを引き継ぐ事ができます。
●【品名を入力します】
●【数量を入力します】
変数 | メインプログラム 引数の値 | サブプログラムA 引数の値 | サブプログラムB 引数の値 |
---|---|---|---|
Tanka (long:数値) | 98,000 | 98,000 | |
Kazu(Long:数値) | 5 | 5 | |
Gokei(Long:数値) | 490,000 | 490,000 | |
Hinmei (String:文字列) | ノートパソコン | ノートパソコン |
Sub Sub_main() 'メインプログラム Dim Tanka, Kazu, Gokei As Long Dim Hinmei As String Hinmei = inputBox("品名を入力してください") Tanka = inputBox("単価を入力してください") Kazu = inputBox("数量を入力してください") Call Sub_A(Tanka, Kazu, Gokei) Call Sub_B(Hinmei, Gokei) End Sub '--------------------------------------------------------------------------- Sub Sub_A(Tanka, Kazu, Gokei) 'サブプログラム A Gokei = Tanka * Kazu '------単価×数量の計算 End Sub '--------------------------------------------------------------------------- Sub Sub_B(Hinmei, Gokei) 'サブプログラム B MsgBox Hinmei & "の合計金額は、" & Gokei & "円です。" '-----品名の合計結果を表示" End Sub
下記のサンプルプログラムは、Subプロシージャを複数のプロシージャから呼び出して実行するサンプルプログラムです。具体的な処理内容としては、ワークシートに表の元となるデータが登録されていて、これを子のプロシージャ【サブルーチン】として①表全体に罫線を引く②先頭行(見出し)罫線と背景色を塗りつぶす③最終行に罫線と背景色を塗りつぶす④表全体の罫線と背景色を削除しますからの構成で作成しております。メインのプロシージャから順番に①~④へ実行される形となります。
●親プロシージャ = メインプログラム
●子プロシージャ = サブルーチン
' '******** AKIRA55.COM ******* https://akira55.com/call/ ' Sub Main02() 'メインプログラム ワークシートの表に罫線を引き、見出しと合計行を背景色で塗りつぶす。 Dim Hani, sentou, saigo As String Hani = Range("A3").CurrentRegion.Address(False, False) 'セルA3から始まる表の範囲を取得(アドレス) keisen_zentai (Hani) '①サブルーチン「keisen_zentai」へ・・・表全体に罫線を引く sentou = Range("A3").CurrentRegion.Rows(1).Address(False, False) 'セルA3から始まる表の先頭行を取得(アドレス) keisen_sentou (sentou) '②サブルーチン「keisen_sentou」へ・・・先頭行(見出し)罫線と背景色を塗りつぶす。 saigo = Range("A3").CurrentRegion.Rows(Range("A3").CurrentRegion.Rows.Count).Address(False, False) 'セルA3から始まる最終行を取得(アドレス) keisen_saigo (saigo) '③サブルーチン「keisen_saigo」へ・・・最終行に罫線と背景色を塗りつぶす。 MsgBox "表に罫線が引かれ、背景色が塗りつぶされました。" keisen_del (Hani) '④サブルーチン「keisen_del」へ・・・ 表全体の罫線と背景色を削除します。 MsgBox "罫線と背景色か削除されました。" End Sub ’------------------------------------------------------- Sub keisen_zentai(Hani As String) '表全体に罫線を引く Range(Hani).Borders.LineStyle = xlContinuous '格子罫線を作成:細実線 End Sub ’------------------------------------------------------- Sub keisen_sentou(sentou As String) '先頭行(見出し)罫線と背景色を塗りつぶす。 With Range(sentou) .Borders(xlEdgeBottom).LineStyle = xlSlantDashDot '先頭行:斜め破線・罫線位置下 .Interior.ColorIndex = 17 End With End Sub ’------------------------------------------------------- Sub keisen_saigo(saigo As String) '最終行に罫線と背景色を塗りつぶす。 With Range(saigo) .Borders(xlEdgeTop).LineStyle = xlDouble '最終行(合計):二重線・罫線位置上 .Interior.ColorIndex = 15 End With End Sub ’------------------------------------------------------- Sub keisen_del(Hani As String) '表全体の罫線と背景色を削除します。 With Range(Hani) '表全体を指定します。 .Borders.LineStyle = xlLineStyleNone '罫線を削除(格子罫線) .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone '罫線を削除(右上がり罫線) .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone '罫線を削除(右下がり罫線) .Interior.ColorIndex = 0 '背景色を削除 End With End Sub ' ' '
【参照:再帰呼び出し:サンプルプログラム】