Excel VBA 逆引き集 | 命名規則(業務Excel向け)

Excel VBA
スポンサーリンク

ねらい:業務Excelに最適な「命名規則」で迷いゼロ・保守ラク

業務Excelは、人とマクロが長く使います。名前が統一されていないと「どれが何か分からない」「修正で壊れる」原因に。命名規則を決めて守るだけで、検索・再利用・引き継ぎが一気に楽になります。初心者でもすぐ使える「実務向けルール」と、貼って使えるテンプレを詳しく解説します。


基本原則(短く強く)

  • 目的: 意味が即わかり、誤操作を防ぎ、変更に強い命名をする。
  • 指針:
    • 短く・一貫: 英数+アンダースコア/ハイフンで統一。略語は固定。
    • 接頭辞で役割を明示: シート/範囲/テーブル/名前定義/モジュール/プロシージャ/変数…
    • 日本語は見出しに、コードは英数: ユーザー向け表示は日本語、コードで参照する識別子は英数。
  • 深掘り(重要):
    • 検索性が命: “売上”を探すとき、シート名・テーブル名・モジュール名が揃っていると迷わない。
    • 変更に強い構造: 列順や文言が変わっても、識別子は不変(Configで参照)にする。

命名マップ(何にどう付けるか一目で)

対象推奨パターン用途禁則・注意
シート区分_役割Data_Input, Report_Monthly機能と役割を明示記号/全角スペース禁止
テーブル(ListObject)tbl名詞tblSales, tblEmployeesデータ集合列名は英数・語義一貫
名前定義(Name)nm_機能nm_OutputFolder, nm_Threshold設定・参照範囲ワークブックスコープ推奨
モジュールMod役割ModIO, ModConfig責務分離1責務1モジュール
プロシージャRun_処理名 / Get/Set/Write…Run_SalesExport, GetConfigString動作が分かる動詞入口はRun_で統一
変数意味+型ヒントsalesTotal As Double中身が見える名前tmp, xは避ける
定数全大文字_区切りDATE_FMT, MAX_ROWS変更禁止の値モジュール先頭に集約
ファイル名ベース_日付SalesReport_yyyy-mm-dd.xlsx世代管理禁則記号除去
バージョン名vMajor.Minor.Patchv1.2.0配布管理先頭コメントに記載
  • 深掘り(重要):
    • tbl/nm/Mod/Run 接頭辞で瞬間理解: “tblSales”を見た瞬間にテーブルと分かる、これが現場で効く。
    • 名前定義は設定の要: パスやしきい値は nm_ で統一すると、コード変更ゼロで差し替え可。

シート・テーブル・名前定義の実務ルール

  • シート名:
    • 形式: 区分_役割(例:Data_Input, Data_Master, Report_Monthly)
    • 環境依存を避ける: 記号/日本語混在は検索性低下、英数+アンダースコアで統一。
  • テーブル名(ListObject):
    • 形式: tbl名詞(tblSales, tblEmployees)
    • 列名: 英数で意味を明確(EmpNo, EmpName, Dept, HireDate)。
  • 名前定義(Name):
    • 形式: nm_機能(nm_OutputFolder, nm_Threshold)
    • スコープ: Workbookスコープ原則。シート限定名は保守が難しい。
' 例:名前定義から設定を読む(命名規則nm_)
Function ReadNmString(ByVal nm As String) As String
    ReadNmString = ThisWorkbook.Names(nm).RefersToRange.Value
End Function

Sub Example_UseNames()
    Dim folder As String: folder = ReadNmString("nm_OutputFolder")
    Dim th As Double: th = CDbl(ReadNmString("nm_Threshold"))
    MsgBox "Folder=" & folder & " / Threshold=" & th
End Sub
VB
  • 深掘り(重要):
    • コードは識別子固定+値は名前定義: 仕様変更はシートで完結。配布後でも安全に運用変更可能。

モジュール・プロシージャ・変数・定数の命名

  • モジュール: Mod役割(ModApp, ModConfig, ModIO, ModLogic, ModService, ModUI)
  • プロシージャ:
    • 入口: Run_処理名(Run_SalesExport, Run_EmployeeImport)
    • ヘルパー: 動詞+目的語(ReadInput, WriteOutput, ValidatePhone)
  • 変数: 名詞+意味+型ヒント(salesTotal As Double, lastRow As Long, empList As Collection)
  • 定数: 全大文字+アンダースコア(DATE_FMT, DEFAULT_FOLDER)
' ModService: 売上エクスポート入口
Public Sub Run_SalesExport()
    Dim ws As Worksheet: Set ws = Worksheets("Data_Sales")
    Dim lo As ListObject: Set lo = ws.ListObjects("tblSales")
    Dim arr As Variant: arr = lo.DataBodyRange.Value
    
    Dim path As String: path = BuildExportPath("SalesReport", "xlsx") ' 動詞+目的語
    WriteWorkbookCopy path ' 動詞+目的語
    MsgBox "エクスポート完了: " & path
End Sub

' ModIO/ModUtil
Public Const DATE_FMT As String = "yyyy-mm-dd_HHNNSS"

Public Function BuildExportPath(ByVal base As String, ByVal ext As String) As String
    Dim folder As String: folder = ReadNmString("nm_OutputFolder")
    BuildExportPath = folder & base & "_" & Format(Now, DATE_FMT) & "." & ext
End Function

Public Sub WriteWorkbookCopy(ByVal path As String)
    ThisWorkbook.SaveCopyAs path
End Sub
VB
  • 深掘り(重要):
    • 入口Run_で揃えるとUI連携が楽: ボタン割当一覧が視認しやすい。
    • 動詞+目的語で“何をするか”が即わかる: Read/Write/Validate/Build/Findが基本動詞。

一覧・略語の標準化(辞書を配布)

  • 略語固定(例):
    • 部門: Dept/部署 → Dept
    • 社員番号: EmpNo
    • 入社日: HireDate
    • 売上: Sales
    • 数量: Qty
    • 金額: Amount
    • 閾値: Threshold
  • コラム命名(英数): EmpNo, EmpName, Dept, HireDate, Phone, Score, SalesDate, Qty, Amount
' 列名の比較は英数固定の規則で(日本語見出しは表示用)
Dim expected As Variant
expected = Array("EmpNo", "EmpName", "Dept", "HireDate", "Phone", "Score")
VB
  • 深掘り(重要):
    • 略語をチームで固定し「辞書配布」: 混在を防ぐ最大の施策。
    • 列名は英数、ヘッダー表示は日本語: 開発・運用双方の利便性を両立。

品質ルールと導入チェック(壊れないための規約)

  • 導入ルール:
    • シート: 区分_役割で英数/アンダースコア統一。
    • テーブル: tbl+名詞。列名は英数固定辞書から選ぶ。
    • 名前定義: nm_+機能。設定は名前定義経由に。
    • モジュール: Mod+役割。1責務1モジュール。
    • 入口プロシージャ: Run_+処理名で揃える。
    • 変数: 意味+型ヒント。tmp/x禁止。
    • 定数: 全大文字+アンダースコア。先頭で集約。
  • 自動検査テンプレ(簡易):
Sub Audit_Naming()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        If Not ws.Name Like "*_*" Then Debug.Print "WARN Sheet名に _ がありません: "; ws.Name
        If ws.Name Like "* *" Then Debug.Print "NG Sheet名にスペース: "; ws.Name
    Next
    
    Dim lo As ListObject
    For Each ws In ThisWorkbook.Worksheets
        For Each lo In ws.ListObjects
            If Not lo.Name Like "tbl*" Then Debug.Print "NG Table名がtbl開始でない: "; lo.Name
        Next
    Next
    
    Dim nm As Name
    For Each nm In ThisWorkbook.Names
        If Not nm.Name Like "nm_*" Then Debug.Print "NG Name定義がnm_開始でない: "; nm.Name
    Next
    MsgBox "命名チェック完了(Immediateに結果)"
End Sub
VB
  • 深掘り(重要):
    • 規約は“守られる仕掛け”まで作る: 目視では綻びが出る。自動チェックで習慣化。

例題で練習(貼って試せる)

  • 例1: シートを Data_Input/Report_Monthly に改名、テーブルを tblSales に統一。
  • 例2: 名前定義 nm_OutputFolder/nm_Threshold を作成し、コードから参照。
  • 例3: 入口を Run_SalesExport に揃え、ボタン割当を一覧化。
  • 例4: Audit_Naming を実行して、規約違反を洗い出し・修正。

実務の落とし穴と対策(ここが肝)

  • 落とし穴1:日本語混在で検索が効かない
    • 対策: コード識別子は英数固定。日本語は表示ヘッダーのみに。
  • 落とし穴2:略語が人によって違う
    • 対策: チーム辞書を配布。EmpNo/Dept/HireDate など標準化。
  • 落とし穴3:入口がバラバラ
    • 対策: Run_で統一。UI・マクロ一覧が分かりやすくなる。
  • 落とし穴4:設定がコードに埋め込み
    • 対策: 名前定義 nm_ 経由で参照。変更はシートで完結。
  • 落とし穴5:規約が形骸化
    • 対策: Audit_Naming の実行を運用に組み込み、違反を継続是正。

スターター手順(最短導入)

  1. 命名辞書を作成(略語・列名の標準一覧)。
  2. シート/テーブル/名前定義の接頭辞規約(区分役割/tbl/nm)を布告。
  3. モジュール・入口の命名統一(Mod/Run_)。
  4. Audit_Naming を配布して、導入チェックを定例化。
  5. Config+名前定義を併用し、設定のコード直書きを撤廃。

タイトルとURLをコピーしました