ここでは 実務ですぐ使える “改良版テンプレート(VBA 標準構成テンプレ)” をまとめて提供します。
このテンプレは、
エラー処理/ログ/設定読み込み/共通モジュール/業務処理モジュール
をすべて含んだ “会社でそのまま使える構成” です。
実務で最も重要なポイントは
「共通化」「分割」「ログ記録」「エラー対応」「設定の外出し」
です。
そのため、下記のようなモジュール構成を採用します。
テンプレ構成(最適な 5 モジュール)
| モジュール名 | 役割 | 実務での使いどころ |
|---|---|---|
| M_Main | メイン処理呼び出しのみ | 全体制御の入口 |
| M_Common | 共通処理(文言、メッセージ、変換など) | 再利用・保守性◎ |
| M_ErrorHandler | 統一的なエラー処理 | バグ調査が圧倒的に楽 |
| M_Log | ログ書込み(時刻・内容) | エラー調査・改善 |
| M_Business | 業務固有ロジック | システム本体 |
① M_Main(メイン処理モジュール)
Option Explicit
Sub RunMain()
On Error GoTo ERR_HANDLER
LogWrite "=== 処理開始 ==="
Call BusinessMain
LogWrite "=== 処理終了 ==="
MsgBox "完了しました", vbInformation
Exit Sub
ERR_HANDLER:
HandleError "RunMain", Err.Number, Err.Description
End Sub
VB🔍 解説
- RunMain からのみ業務処理を呼び出す
- どんな処理もここから開始
- 例外発生 → 統一的な
HandleErrorへ
② M_Common(共通処理)
Option Explicit
Function Nz(v, Optional defaultValue As Variant = "") As Variant
If IsEmpty(v) Or IsNull(v) Or v = "" Then
Nz = defaultValue
Else
Nz = v
End If
End Function
Function ToHankaku(ByVal s As String) As String
ToHankaku = StrConv(s, vbNarrow)
End Function
Function GetConfig(key As String) As String
Dim sh As Worksheet
Set sh = Sheets("設定")
Dim rng As Range
Set rng = sh.Range("A:A").Find(what:=key, LookAt:=xlWhole)
If rng Is Nothing Then
GetConfig = ""
Else
GetConfig = rng.Offset(0, 1).Value
End If
End Function
VB🔍 実務ポイント
- Nz は Access 系で超便利 → Null/Empty でも安全処理
- 全角→半角などの 入力正規化 は実務で頻出
- GetConfig は「設定シート」からパラメータを読み込む
→ 「設定を外部化すると保守が爆速」
③ M_ErrorHandler(エラー処理専用)
Option Explicit
Sub HandleError(procName As String, errNum As Long, errMsg As String)
LogWrite "【エラー】" & procName & _
" / Err:" & errNum & _
" / " & errMsg
MsgBox "エラーが発生しました:" & vbCrLf & _
"場所:" & procName & vbCrLf & _
"内容:" & errMsg, vbCritical
End Sub
VB🔍 実務ポイント
- すべてのエラーは「この関数に集約する」
- どこで起きても
- 処理場所
- エラー番号
- 内容
がログに残るため、再現調査が劇的に減る。
④ M_Log(ログ記録モジュール)
Option Explicit
Sub LogWrite(msg As String)
Dim sh As Worksheet
Set sh = Sheets("ログ")
Dim r As Long
r = sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
sh.Cells(r, 1).Value = Now
sh.Cells(r, 2).Value = msg
End Sub
VB🔍 実務ポイント
- ログは 最低限 2列(時刻+内容) あればOK
- 必須:
- 処理開始
- 処理終了
- エラー発生箇所
- 不具合分析の生産性が 5 倍以上変わります
⑤ M_Business(業務処理モジュール)
例として「データ読み込み → 整形 → 出力」という
実務標準のフローにしています。
Option Explicit
Sub BusinessMain()
On Error GoTo ERR_HANDLER
LogWrite "業務処理開始"
Dim data As Variant
data = ReadData()
data = NormalizeData(data)
WriteData data
LogWrite "業務処理終了"
Exit Sub
ERR_HANDLER:
HandleError "BusinessMain", Err.Number, Err.Description
End Sub
VBデータ読み込み(Range → 配列)
Function ReadData() As Variant
Dim sh As Worksheet
Set sh = Sheets("入力")
ReadData = sh.Range("A1").CurrentRegion.Value
End Function
VBデータ整形(半角化・空白処理など)
Function NormalizeData(arr As Variant) As Variant
Dim r As Long, c As Long
For r = 1 To UBound(arr, 1)
For c = 1 To UBound(arr, 2)
arr(r, c) = ToHankaku(Trim(arr(r, c)))
Next c
Next r
NormalizeData = arr
End Function
VB出力(配列 → Range 書戻し)
Sub WriteData(arr As Variant)
Dim sh As Worksheet
Set sh = Sheets("出力")
sh.Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub
VB実務テンプレの特徴まとめ
統一されたエラー処理
→ バグ発生箇所が一瞬で分かる
ログ出力(Debug.Print ではなくログシート)
→ 問題が起きても再現不要
設定値をシート化
→ EXE や外部ツール並みに扱いやすい
Range → 配列 → Range の定石フロー
→ 大量データも高速
Sub の分割と責務分離
→ バグが少なく保守しやすい構成

