目標
サブルーチを理解して利用できる
サブルーチンの概要と利用方法
サブルーチンとは
他のプロシージャに呼び出される「プロシージャ」のことを「サブルーチン」といいます。サブルーチンを準備することで同じコードを複数のプロシージャ内に記述する手間がなくなります。
サブルーチンの利用方法
サブルーチンの構文とその作成
サブルーチンはプロシージャです。記述はプロシージャと同じで標準モジュールに記述します。作成したサブルーチンは、どのモジュールからも呼び出すことができます。
サブルーチンの構文
Sub サブルーチン名()
処理
End Sub
Excelの準備
シート1、シート2、シート3、シート4はこれまでの記事で使用しているので今回はシート5「Sheet5」を利用するプロシージャを記述しています。Sheet5には以下の入力が済んでいる状態です。この入力に対してプログラムを動かします。
サブルーチン1の作成
サンプルサブルーチン1
サンプルサブルーチン1は印刷機能の記事で取り上げたものと同じものです。
Sub printProgram1()
Sheets("sheet5").Select
With ActiveSheet.PageSetup
.PrintArea = "K1:Q8"
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
End With
ActiveSheet.PrintPreview EnableChanges:=False
End Sub
サブルーチン1の呼び出し
サンプルプロシージャ1
Sub callprintProgram1()
Dim i As Integer, j As Integer
Dim rowNum As Integer
Sheets("Sheet5").Select
Range("A1").Select
ActiveCell.CurrentRegion.Select
rowNum = Selection.Rows.Count
i = 2
Do While i <= rowNum
Range("L1").Value = Cells(i, 1).Value
Range("L4").Value = Cells(i, 3).Value * (Cells(i, 6).Value - Cells(i, 8).Value)
Range("M4").Value = Cells(i, 4).Value * (Cells(i, 7).Value - Cells(i, 9).Value)
If Cells(i, 6).Value + Cells(i, 7).Value > 0 Then
'##############################
'#ここでサンプルサブルーチン1の呼び出し#
'##############################
printProgram1
End If
i = i + 1
Loop
End Sub
サブルーチン1呼び出しの実行結果
サブルーチン2の作成
サンプルサブルーチン2
サンプルサブルーチン2は実務でもよく利用するものを取り上げます。以下のサブルーチンは、開発前にまとめておくと、とても便利な機能のセットになります。個人用マクロブックなどに置いておいて、利用するときに開発ブック内の標準モジュールにコピーするなどすると開発作業を効率的に行えます。
'よくある設定(繰り返し文での利用前)
Sub 繰り返し文の前()
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
'よくある設定(繰り返し文での利用後)
Sub 繰り返し文の後()
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'よくある設定(リボンの非表示)
Sub リボンの非表示()
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"",False)"
End Sub
'よくある設定(リボンの再表示)
Sub リボンの再表示()
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"",True)"
End Sub
'よくある設定(ウィンドウオプションの非表示)
Sub ウィンドウオプションの非表示()
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
End Sub
'よくある設定(ウィンドウオプションの再表示)
Sub ウィンドウオプションの再表示()
ActiveWindow.DisplayGridlines = True
ActiveWindow.DisplayHeadings = True
End Sub
'よくある設定(数式バー・ステータスバーの非表示)
Sub ステータスバーの非表示()
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
End Sub
'よくある設定(数式バー・ステータスバーの再表示)
Sub ステータスバーの再表示()
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
End Sub
サブルーチン2の呼び出し
サンプルプロシージャ2
Sub callSubroutine()
MsgBox "繰り返し文 "
Worksheets("sheet6").Select
Dim i As Long
繰り返し文の前
For i = 1 To 1000
Cells(i, 1).Select
Cells(i, 1).Value = i
Next i
繰り返し文の後
MsgBox "リボンの非表示をします "
リボンの非表示
MsgBox "リボンの再表示をします "
リボンの再表示
MsgBox "ウィンドウオプションの非表示をします "
ウィンドウオプションの非表示
MsgBox "ウィンドウオプションの再表示をします "
ウィンドウオプションの再表示
MsgBox "数式バーとステータスバーの非表示をします "
ステータスバーの非表示
MsgBox "数式バーとステータスバーの再表示をします "
ステータスバーの再表示
End Sub
サブルーチン2呼び出しの実行結果
引数付きサブルーチンの概要と利用方法
引数付きサブルーチンとは
サブルーチンでは呼び出し側のプロシージャ内で利用している値を取り込むことができます。この時利用されるのが「引数」となります。引数がついたサブルーチンを「引数付きサブルーチン」と呼びます。
引数付きサブルーチンの利用方法
引数付きサブルーチンの構文とその作成
引数付きサブルーチンはサブルーチンに引数を持たせたものです。引数は丸カッコ「()」で囲み、引数はカンマ「,」で区切って利用します。
引数付きサブルーチンの構文
Sub サブルーチン名(第1引数名 As 第1引数のデータ型, 第2引数名 As 第2引数のデータ型, 第3引数名 As 第3引数のデータ型,…)
処理
End Sub
引く数付きサブルーチンの作成
サンプルサブルーチン3の作成
ここで利用するサンプルサブルーチンと呼び出しプロシージャはDo Loopの記事で扱ったプロシージャを変更したものとなります。より業務に利用しやすいプログラムへ改修しています。
'ひとつ目の引数付きサブルーチン'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 従業員明細印刷(Name As String, i As Integer, rowNum As Integer)
Do While i <= rowNum
If Cells(i, 1).Value = Name Then
Range("L1").Value = Cells(i, 1).Value
Range("L4").Value = Cells(i, 3).Value * (Cells(i, 6).Value - Cells(i, 8).Value)
Range("M4").Value = Cells(i, 4).Value * (Cells(i, 7).Value - Cells(i, 9).Value)
If Cells(i, 6).Value + Cells(i, 7).Value > 0 Then
printProgram1
End If
End If
i = i + 1
Loop
End Sub
'ふたつ目の引数付きサブルーチン'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 従業員時給変更(Name As String, i As Integer, rowNum As Integer)
Dim renewWage As Integer
renewWage = InputBox("時給額を入力")
Do While i <= rowNum
If Cells(i, 1).Value = Name Then
Cells(i, 3).Value = renewWage
End If
i = i + 1
Loop
End Sub
'みっつ目の引数付きサブルーチン'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub 従業員追加(rowNum As Integer)
Dim Name As String
Dim Address As String
Dim renewWage As Integer
Name = InputBox("従業員名を入力してください")
Address = InputBox("住所を入力してください")
renewWage = InputBox("時給額を入力")
Cells(rowNum + 1, 1).Value = Name
Cells(rowNum + 1, 2).Value = Address
Cells(rowNum + 1, 3).Value = renewWage
Cells(rowNum + 1, 4).Value = renewWage * 1.2
End Sub
サブルーチン3の呼び出し
Sub jobDes()
Dim i As Integer, j As Integer
Dim rowNum As Integer
Dim jobDescription As Integer
Sheets("Sheet5").Select
Range("A1").Select
ActiveCell.CurrentRegion.Select
rowNum = Selection.Rows.Count
Dim inputName As String
jobDescription = Val(InputBox("業務番号を選択" & Chr(10) _
& "従業員の明細印刷:" & Chr(9) & "「1」" & Chr(10) _
& "従業員の時給変更:" & Chr(9) & "「2」" & Chr(10) _
& "従業員の追加:" & Chr(9) & Chr(9) & "「3」"))
'##############################
'#ここでサブルーチンの呼び出し#
'##############################
Select Case jobDescription
Case 1
inputName = InputBox("検索する名前を入力してください")
従業員明細印刷 inputName, 2, rowNum
Case 2
inputName = InputBox("検索する名前を入力してください")
従業員時給変更 inputName, 2, rowNum
Case 3
従業員追加 rowNum
Case Else
End Select
End Sub
サブルーチン2呼び出しの実行結果
今回は以上となります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。