01-VBA

印刷機能番外|Excel VBA (Part.3)【サブルーチン】編 | 現役エンジニア&プログラミングスクール講師

目標

サブルーチを理解して利用できる

サブルーチンの概要と利用方法

サブルーチンとは

他のプロシージャに呼び出される「プロシージャ」のことを「サブルーチン」といいます。サブルーチンを準備することで同じコードを複数のプロシージャ内に記述する手間がなくなります。

サブルーチンの利用方法

サブルーチンの構文とその作成

サブルーチンはプロシージャです。記述はプロシージャと同じで標準モジュールに記述します。作成したサブルーチンは、どのモジュールからも呼び出すことができます。

サブルーチンの構文

Sub サブルーチン名()
処理
End Sub

※サブルーチンの構文と書きましたが、単純なプロシージャのことです。

Excelの準備

シート1、シート2、シート3、シート4はこれまでの記事で使用しているので今回はシート5「Sheet5」を利用するプロシージャを記述しています。Sheet5には以下の入力が済んでいる状態です。この入力に対してプログラムを動かします。

サブルーチン1の作成

サンプルサブルーチン1

サンプルサブルーチン1は印刷機能の記事で取り上げたものと同じものです。

印刷機能|Excel VBA (Part.1)【PageSetupプロパティ/PrintPreviewメソッド/PrintOutメソッド】編 | 現役エンジニア&プログラミングスクール講師ExcelVBAのPageSetupプロパティ/PrintPreviewメソッド/PrintOutメソッドについての記事です。...
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の記事で扱ったプロシージャを変更したものとなります。より業務に利用しやすいプログラムへ改修しています。

制御構文|Excel VBA (Part.10)【Do Loop】実用的なプログラム編 | 現役エンジニア&プログラミングスクール講師ExcelVBAの制御構文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呼び出しの実行結果

今回は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

Excel VBA の「デバッグ」(Part.3)「イミディエイトウィンドウ」「ウォッチウィンドウ」| 現役エンジニア&プログラミングスクール講師

2022年12月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

クラスの利用方法|Excel VBA (Part.1) | 現役エンジニア&プログラミングスクール講師

2023年2月17日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の イベント編(Part.3)「フォームコントロール」「ActiveX コントロール」| 現役エンジニア&プログラミングスクール講師

2022年12月30日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

制御構文|Excel VBA (Part.2)【If Then】基本編 | 現役エンジニア&プログラミングスクール講師

2022年11月10日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

演算子|Excel VBA (Part.1)【算術演算子・代入演算子】| 現役エンジニア&プログラミングスクール講師

2022年10月24日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「オブジェクト活用」(Part.3)【データの並び替え・抽出編】| 現役エンジニア&プログラミングスクール講師

2022年12月16日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site