【ExcelVBA・マクロ】 Private Const完全ガイド【PublicConstやDimとの違いも解説】

Private Const ExcelVBA
スポンサーリンク
スポンサーリンク
  1. この記事で解決できる悩み
  2. この記事を読むと…
  3. Private Constとは?3つの定数宣言を3分で理解
    1. 3つの定数宣言の違い
    2. スコープを図で理解
  4. Private ConstとPublic Constの違い
    1. 比較表
    2. 使い分けの基本ルール
    3. 実例1: Private Constの使用例
    4. 実例2: Public Constの使用例
  5. ConstとDimの違い【変数 vs 定数】
    1. 変数(Dim)と定数(Const)の比較
    2. 悪い例: 変数を使ってしまう
    3. 良い例: 定数を使う
    4. 定数を使うべき値
  6. Private Constの基本構文と実例5パターン
    1. 基本構文
    2. 実例3: シート名・列番号の管理
    3. 実例4: 計算用の定数
    4. 実例5: ファイルパス・URL管理
    5. 実例6: エラー番号の定数管理
    6. 実例7: 複数の定数をグループ化
  7. 定数の命名規則とベストプラクティス
    1. 定数の命名規則
      1. 推奨される命名規則
      2. 避けるべき命名
    2. 定数名の接頭辞ルール
    3. 実例8: 接頭辞を使った定数管理
  8. 定数を使うメリット・デメリット
    1. メリット
    2. デメリット
  9. 実務で使える定数管理テンプレート3選
    1. テンプレート1: 設定値の一元管理モジュール
    2. テンプレート2: モジュール別定数管理
    3. テンプレート3: Enum型を使った定数グループ化
  10. よくある質問(FAQ)7問
    1. Q1. Private ConstとPublic Constはどう使い分ける?
    2. Q2. Constを省略してPrivateだけでもいい?
    3. Q3. 定数の型は省略できる?
    4. Q4. クラスモジュールでPublic Constは使える?
    5. Q5. 定数名は大文字にしないとダメ?
    6. Q6. 定数は実行時に変更できない?
    7. Q7. 複数の定数を一度に宣言できる?
  11. まとめ
    1. この記事で学んだこと

この記事で解決できる悩み

✅ Private ConstとPublic Constの違いが分からない
✅ ConstとDimの使い分けが分からない
✅ 定数の命名規則が分からない
✅ どこで定数を宣言すればいいか分からない
✅ 実務で使える定数管理のベストプラクティスが知りたい


この記事を読むと…

  • Private Const/Public Const/Constの3つの違いが完璧に理解できる
  • 定数を使うメリットとデメリットが分かる
  • 実例コード15個で定数の使い方を習得
  • 定数の命名規則とベストプラクティスを実践できる
  • 実務で使える定数管理テンプレートを取得できる

Private Constとは?3つの定数宣言を3分で理解

3つの定数宣言の違い

VBAでは、定数を宣言する方法が3種類あります。

宣言方法スコープ(適用範囲)宣言場所使用例
Constプロシージャ内のみプロシージャ内Sub Test() の中で宣言
Private Constモジュール内のみモジュールの先頭標準モジュール・クラスモジュールの宣言セクション
Public Constプロジェクト全体標準モジュールの先頭全モジュールから参照可能

スコープを図で理解

【パターン1: Const(プロシージャレベル)】
Sub CalculatePrice()
    Const TAX_RATE As Double = 0.1  ← この中だけで使える
    Debug.Print 100 * (1 + TAX_RATE)  '→ 110
End Sub

Sub AnotherProc()
    Debug.Print TAX_RATE  '← エラー!TAX_RATEは使えない
End Sub


【パターン2: Private Const(モジュールレベル)】
'▼ モジュール先頭に宣言
Private Const TAX_RATE As Double = 0.1

Sub CalculatePrice()
    Debug.Print 100 * (1 + TAX_RATE)  '→ 110 使える!
End Sub

Sub AnotherProc()
    Debug.Print TAX_RATE  '→ 0.1 使える!
End Sub

'【別モジュール】
Sub DifferentModule()
    Debug.Print TAX_RATE  '← エラー!別モジュールでは使えない
End Sub


【パターン3: Public Const(プロジェクトレベル)】
'▼ 標準モジュールの先頭に宣言
Public Const TAX_RATE As Double = 0.1

'【どのモジュールからも使える】
Sub AnyModule()
    Debug.Print TAX_RATE  '→ 0.1 どこでも使える!
End Sub

Private ConstとPublic Constの違い

比較表

項目Private ConstPublic Const
適用範囲宣言したモジュール内のみプロジェクト全体(全モジュール)
宣言場所標準/クラスモジュールの先頭標準モジュールの先頭のみ
他モジュールから参照❌ 不可✅ 可能
カプセル化✅ 高い❌ 低い
推奨用途モジュール固有の設定値プロジェクト全体の共通定数

使い分けの基本ルール

Private Constを使う場面

  • そのモジュール内でのみ使う定数
  • 他のモジュールに公開したくない内部設定値
  • カプセル化を重視する場合

Public Constを使う場面

  • プロジェクト全体で共通の定数(税率、バージョン情報など)
  • 複数のモジュールで参照する設定値
  • グローバルな定数として公開したい値

実例1: Private Constの使用例

'▼ Module1の先頭
Option Explicit

'このモジュール内だけで使う定数
Private Const MAX_ROWS As Long = 1000
Private Const START_ROW As Long = 2
Private Const SHEET_NAME As String = "データ"

Sub ProcessData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
    
    Dim i As Long
    For i = START_ROW To MAX_ROWS
        ws.Cells(i, 1).Value = i
    Next i
    
    Debug.Print "処理完了: " & MAX_ROWS & "行"
End Sub

Sub ValidateData()
    '同じモジュール内なので定数が使える
    If Range("A" & MAX_ROWS).Value <> "" Then
        Debug.Print "最終行まで到達"
    End If
End Sub

実例2: Public Constの使用例

'▼ GlobalConstants モジュールの先頭
Option Explicit

'プロジェクト全体で使う定数
Public Const APP_VERSION As String = "1.0.0"
Public Const TAX_RATE As Double = 0.1
Public Const MAX_FILE_SIZE As Long = 10485760  '10MB

Public Const ERR_FILE_NOT_FOUND As Long = vbObjectError + 1001
Public Const ERR_INVALID_DATA As Long = vbObjectError + 1002


'▼ Module1
Sub CalculatePrice()
    Dim price As Double
    price = 100 * (1 + TAX_RATE)  '← Public Constなので使える
    Debug.Print "税込価格: " & price
End Sub


'▼ Module2
Sub ShowVersion()
    MsgBox "バージョン: " & APP_VERSION  '← Public Constなので使える
End Sub

ConstとDimの違い【変数 vs 定数】

変数(Dim)と定数(Const)の比較

項目変数(Dim)定数(Const)
値の変更✅ 可能❌ 不可(変更するとエラー)
メモリ効率実行中はメモリ保持コンパイル時に値が埋め込まれる
初期値設定宣言時は省略可宣言時に必須
型推論省略可(Variant型)省略可(自動判定)
推奨用途動的に変わる値固定値・設定値

悪い例: 変数を使ってしまう

Sub BadExample()
    '変数で宣言(良くない)
    Dim TAX_RATE As Double
    TAX_RATE = 0.1
    
    '計算1
    Dim price1 As Double
    price1 = 100 * (1 + TAX_RATE)
    
    '誤って変更してしまう(バグの原因!)
    TAX_RATE = 0.2  '← 意図せず変更
    
    '計算2
    Dim price2 As Double
    price2 = 100 * (1 + TAX_RATE)  '← 異なる結果になってしまう
    
    Debug.Print price1  '→ 110
    Debug.Print price2  '→ 120(想定外!)
End Sub

良い例: 定数を使う

Sub GoodExample()
    '定数で宣言(推奨)
    Const TAX_RATE As Double = 0.1
    
    '計算1
    Dim price1 As Double
    price1 = 100 * (1 + TAX_RATE)
    
    '誤って変更しようとしてもエラーになる
    'TAX_RATE = 0.2  '← コンパイルエラー!
    
    '計算2
    Dim price2 As Double
    price2 = 100 * (1 + TAX_RATE)  '← 常に同じ結果
    
    Debug.Print price1  '→ 110
    Debug.Print price2  '→ 110(正しい!)
End Sub

定数を使うべき値

以下のような値は必ず定数で宣言してください。

  • 税率・手数料率Const TAX_RATE As Double = 0.1
  • シート名・範囲名Const DATA_SHEET As String = "データ"
  • 列番号Const COL_NAME As Long = 1
  • 最大値・最小値Const MAX_ROWS As Long = 10000
  • ファイルパスConst LOG_PATH As String = "C:\logs\"
  • バージョン情報Const APP_VERSION As String = "1.0.0"
  • エラー番号Const ERR_CUSTOM As Long = vbObjectError + 1001

Private Constの基本構文と実例5パターン

基本構文

'▼ モジュール先頭(宣言セクション)
Option Explicit

'基本形
Private Const 定数名 As データ型 = 値

'型を省略した場合(自動判定)
Private Const 定数名 = 値

実例3: シート名・列番号の管理

'▼ Module1の先頭
Option Explicit

'シート名
Private Const SHEET_DATA As String = "データ"
Private Const SHEET_RESULT As String = "集計結果"

'列番号
Private Const COL_ID As Long = 1
Private Const COL_NAME As Long = 2
Private Const COL_PRICE As Long = 3
Private Const COL_QUANTITY As Long = 4

Sub ProcessData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(SHEET_DATA)
    
    '列番号を定数で管理
    ws.Cells(2, COL_ID).Value = 1001
    ws.Cells(2, COL_NAME).Value = "商品A"
    ws.Cells(2, COL_PRICE).Value = 1000
    ws.Cells(2, COL_QUANTITY).Value = 5
    
    Debug.Print "データ登録完了"
End Sub

Sub GetProductName()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(SHEET_DATA)
    
    '列番号を定数で参照
    Debug.Print ws.Cells(2, COL_NAME).Value  '→ 商品A
End Sub

実例4: 計算用の定数

'▼ Module2の先頭
Option Explicit

'計算用定数
Private Const TAX_RATE As Double = 0.1        '消費税率
Private Const DISCOUNT_RATE As Double = 0.05  '割引率
Private Const SHIPPING_FEE As Long = 500      '送料

Sub CalculateTotalPrice()
    Dim basePrice As Long
    basePrice = 10000
    
    '定数を使った計算
    Dim discountPrice As Double
    discountPrice = basePrice * (1 - DISCOUNT_RATE)
    
    Dim taxIncluded As Double
    taxIncluded = discountPrice * (1 + TAX_RATE)
    
    Dim totalPrice As Double
    totalPrice = taxIncluded + SHIPPING_FEE
    
    Debug.Print "基本価格: " & basePrice          '→ 10000
    Debug.Print "割引後: " & discountPrice        '→ 9500
    Debug.Print "税込: " & taxIncluded            '→ 10450
    Debug.Print "合計(送料込): " & totalPrice     '→ 10950
End Sub

実例5: ファイルパス・URL管理

'▼ Module3の先頭
Option Explicit

'ファイルパス
Private Const LOG_DIR As String = "C:\Logs\"
Private Const BACKUP_DIR As String = "C:\Backup\"
Private Const TEMPLATE_PATH As String = "C:\Templates\報告書.xlsx"

'URL
Private Const API_BASE_URL As String = "https://api.example.com/v1/"
Private Const API_TIMEOUT As Long = 30

Sub SaveLog()
    Dim logPath As String
    logPath = LOG_DIR & Format(Now, "yyyymmdd") & ".txt"
    
    '定数を使ったファイル操作
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim logFile As Object
    Set logFile = fso.CreateTextFile(logPath, True)
    logFile.WriteLine "ログ記録: " & Now
    logFile.Close
    
    Debug.Print "ログ保存: " & logPath
    
    Set logFile = Nothing
    Set fso = Nothing
End Sub

実例6: エラー番号の定数管理

'▼ Module4の先頭
Option Explicit

'カスタムエラー番号
Private Const ERR_FILE_NOT_FOUND As Long = vbObjectError + 1001
Private Const ERR_INVALID_FORMAT As Long = vbObjectError + 1002
Private Const ERR_CONNECTION_FAILED As Long = vbObjectError + 1003

Sub ProcessFile(filePath As String)
    On Error GoTo ErrorHandler
    
    '存在確認
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Not fso.FileExists(filePath) Then
        '定数を使ったエラー発生
        Err.Raise ERR_FILE_NOT_FOUND, "ProcessFile", "ファイルが見つかりません: " & filePath
    End If
    
    '処理
    Debug.Print "ファイル処理中: " & filePath
    
    Set fso = Nothing
    Exit Sub
    
ErrorHandler:
    '定数を使ったエラー判定
    Select Case Err.Number
        Case ERR_FILE_NOT_FOUND
            MsgBox "ファイルが見つかりません。", vbCritical
        Case ERR_INVALID_FORMAT
            MsgBox "ファイル形式が不正です。", vbCritical
        Case ERR_CONNECTION_FAILED
            MsgBox "接続に失敗しました。", vbCritical
        Case Else
            MsgBox "予期しないエラー: " & Err.Description, vbCritical
    End Select
End Sub

実例7: 複数の定数をグループ化

'▼ Module5の先頭
Option Explicit

'========== アプリケーション設定 ==========
Private Const APP_NAME As String = "在庫管理システム"
Private Const APP_VERSION As String = "2.1.0"
Private Const APP_AUTHOR As String = "開発チーム"

'========== データベース設定 ==========
Private Const DB_SERVER As String = "localhost"
Private Const DB_NAME As String = "inventory"
Private Const DB_TIMEOUT As Long = 30

'========== 表示設定 ==========
Private Const FONT_NAME As String = "メイリオ"
Private Const FONT_SIZE As Long = 11
Private Const HEADER_COLOR As Long = RGB(68, 114, 196)

Sub ShowAppInfo()
    MsgBox "アプリ名: " & APP_NAME & vbCrLf & _
           "バージョン: " & APP_VERSION & vbCrLf & _
           "作成者: " & APP_AUTHOR, _
           vbInformation
End Sub

Sub FormatHeader()
    With Range("A1")
        .Font.Name = FONT_NAME
        .Font.Size = FONT_SIZE
        .Interior.Color = HEADER_COLOR
        .Font.Color = RGB(255, 255, 255)
    End With
End Sub

定数の命名規則とベストプラクティス

定数の命名規則

推奨される命名規則

1. 全て大文字 + アンダーバー(スネークケース)

'✅ 良い例
Private Const TAX_RATE As Double = 0.1
Private Const MAX_FILE_SIZE As Long = 10485760
Private Const DATA_SHEET_NAME As String = "データ"
Private Const API_BASE_URL As String = "https://api.example.com/"

2. キャメルケース(大文字始まり)

'✅ 良い例(可読性重視の場合)
Private Const TaxRate As Double = 0.1
Private Const MaxFileSize As Long = 10485760
Private Const DataSheetName As String = "データ"

避けるべき命名

'❌ 悪い例
Private Const taxrate As Double = 0.1          '小文字のみ(定数と分からない)
Private Const TR As Double = 0.1                '略語(意味が分からない)
Private Const TaxRateForJapan2024 As Double = 0.1  '長すぎる
Private Const tax_Rate As Double = 0.1          '混在(統一感がない)

定数名の接頭辞ルール

目的別に接頭辞を付けると管理しやすくなります。

接頭辞用途
COL_列番号COL_NAMECOL_PRICE
ROW_行番号ROW_HEADERROW_START
SHEET_シート名SHEET_DATASHEET_RESULT
ERR_エラー番号ERR_FILE_NOT_FOUND
MAX_ / MIN_最大値/最小値MAX_ROWSMIN_VALUE
PATH_ファイルパスPATH_LOGPATH_BACKUP
URL_URLURL_APIURL_BASE

実例8: 接頭辞を使った定数管理

'▼ Module6の先頭
Option Explicit

'========== シート名 ==========
Private Const SHEET_DATA As String = "データ"
Private Const SHEET_MASTER As String = "マスタ"
Private Const SHEET_RESULT As String = "結果"

'========== 列番号 ==========
Private Const COL_ID As Long = 1
Private Const COL_NAME As Long = 2
Private Const COL_CATEGORY As Long = 3
Private Const COL_PRICE As Long = 4

'========== 行番号 ==========
Private Const ROW_HEADER As Long = 1
Private Const ROW_START As Long = 2

'========== 最大値・最小値 ==========
Private Const MAX_ROWS As Long = 10000
Private Const MIN_PRICE As Long = 0

'========== ファイルパス ==========
Private Const PATH_LOG As String = "C:\Logs\"
Private Const PATH_EXPORT As String = "C:\Export\"

Sub ProcessWithConstants()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(SHEET_DATA)
    
    '定数を使った処理
    Dim i As Long
    For i = ROW_START To MAX_ROWS
        If ws.Cells(i, COL_ID).Value = "" Then Exit For
        
        '価格チェック
        If ws.Cells(i, COL_PRICE).Value < MIN_PRICE Then
            ws.Cells(i, COL_PRICE).Interior.Color = RGB(255, 0, 0)
        End If
    Next i
End Sub

定数を使うメリット・デメリット

メリット

1. 可読性の向上

'❌ 悪い例: マジックナンバー
If ws.Cells(i, 3).Value > 1000 Then
    ws.Cells(i, 5).Value = ws.Cells(i, 3).Value * 0.1
End If

'✅ 良い例: 定数で意味が明確
Private Const COL_PRICE As Long = 3
Private Const COL_TAX As Long = 5
Private Const TAX_RATE As Double = 0.1

If ws.Cells(i, COL_PRICE).Value > 1000 Then
    ws.Cells(i, COL_TAX).Value = ws.Cells(i, COL_PRICE).Value * TAX_RATE
End If

2. メンテナンス性の向上

'❌ 悪い例: 同じ値を複数箇所に記述
Sub Proc1()
    Debug.Print 0.1  '税率
End Sub

Sub Proc2()
    Debug.Print 0.1  '税率(変更時は全箇所修正が必要)
End Sub


'✅ 良い例: 定数で一元管理
Private Const TAX_RATE As Double = 0.1

Sub Proc1()
    Debug.Print TAX_RATE  '定数を参照
End Sub

Sub Proc2()
    Debug.Print TAX_RATE  '定数変更だけで全体に反映
End Sub

3. バグの防止

'❌ 悪い例: 変数は意図せず変更される可能性
Dim taxRate As Double
taxRate = 0.1

'処理中に誤って変更
taxRate = 0.2  '← バグの原因!


'✅ 良い例: 定数は変更できない
Const TAX_RATE As Double = 0.1

'変更しようとするとエラー
'TAX_RATE = 0.2  '← コンパイルエラー!

4. パフォーマンスの向上

定数はコンパイル時に値が埋め込まれるため、変数よりもわずかに高速です(体感できるほどの差はありませんが、厳密にはメリットです)。


デメリット

1. 柔軟性の低下

実行時に値を変更する必要がある場合は、定数は使えません。

'定数は実行時に変更できない
Private Const TAX_RATE As Double = 0.1

Sub ChangeTaxRate()
    '実行時に変更したい場合は変数を使う
    'TAX_RATE = 0.08  '← エラー!
    
    '変数を使う必要がある
    Dim dynamicTaxRate As Double
    dynamicTaxRate = 0.08  '← 変更可能
End Sub

2. 配列定数の制約

VBAでは配列定数を直接宣言できません。

'❌ 配列定数は宣言できない
'Private Const MONTHS As Variant = Array("1月", "2月", "3月")  'エラー!

'✅ 変数で配列を使う
Private MONTHS As Variant

Sub InitializeArray()
    MONTHS = Array("1月", "2月", "3月")
End Sub

実務で使える定数管理テンプレート3選

テンプレート1: 設定値の一元管理モジュール

'▼ ConfigModule(標準モジュール)
Option Explicit

'========================================
' アプリケーション設定定数
'========================================

'========== バージョン情報 ==========
Public Const APP_NAME As String = "販売管理システム"
Public Const APP_VERSION As String = "3.2.1"
Public Const APP_RELEASE_DATE As String = "2026-02-11"

'========== シート名 ==========
Public Const SHEET_DATA As String = "売上データ"
Public Const SHEET_MASTER As String = "商品マスタ"
Public Const SHEET_RESULT As String = "集計結果"
Public Const SHEET_SETTINGS As String = "設定"

'========== 列番号 ==========
Public Const COL_DATE As Long = 1
Public Const COL_PRODUCT_ID As Long = 2
Public Const COL_PRODUCT_NAME As Long = 3
Public Const COL_QUANTITY As Long = 4
Public Const COL_UNIT_PRICE As Long = 5
Public Const COL_SUBTOTAL As Long = 6
Public Const COL_TAX As Long = 7
Public Const COL_TOTAL As Long = 8

'========== 行番号 ==========
Public Const ROW_HEADER As Long = 1
Public Const ROW_DATA_START As Long = 2

'========== 計算定数 ==========
Public Const TAX_RATE As Double = 0.1
Public Const DISCOUNT_THRESHOLD As Long = 10000
Public Const DISCOUNT_RATE As Double = 0.05

'========== ファイルパス ==========
Public Const PATH_LOG As String = "C:\SalesSystem\Logs\"
Public Const PATH_BACKUP As String = "C:\SalesSystem\Backup\"
Public Const PATH_EXPORT As String = "C:\SalesSystem\Export\"

'========== 制限値 ==========
Public Const MAX_ROWS As Long = 50000
Public Const MAX_FILE_SIZE As Long = 52428800  '50MB

'========== カスタムエラー番号 ==========
Public Const ERR_FILE_NOT_FOUND As Long = vbObjectError + 1001
Public Const ERR_INVALID_DATA As Long = vbObjectError + 1002
Public Const ERR_DUPLICATE_ID As Long = vbObjectError + 1003

テンプレート2: モジュール別定数管理

'▼ DataProcessModule(標準モジュール)
Option Explicit

'このモジュール固有の定数(Private)
Private Const MODULE_NAME As String = "DataProcessModule"

Private Const TEMP_SHEET As String = "一時データ"
Private Const PROCESS_CHUNK_SIZE As Long = 1000
Private Const RETRY_COUNT As Long = 3
Private Const RETRY_INTERVAL As Long = 2000  'ミリ秒

Sub ProcessLargeData()
    On Error GoTo ErrorHandler
    
    Debug.Print "モジュール: " & MODULE_NAME
    Debug.Print "チャンクサイズ: " & PROCESS_CHUNK_SIZE
    
    'データ処理
    Dim i As Long
    For i = 1 To 10000 Step PROCESS_CHUNK_SIZE
        '1000行ずつ処理
        Debug.Print "処理中: " & i & " - " & (i + PROCESS_CHUNK_SIZE - 1)
    Next i
    
    Exit Sub
    
ErrorHandler:
    Debug.Print "エラー in " & MODULE_NAME & ": " & Err.Description
End Sub

テンプレート3: Enum型を使った定数グループ化

'▼ EnumConstants(標準モジュール)
Option Explicit

'========== Enum型で定数をグループ化 ==========

'シート種別
Public Enum SheetType
    stData = 1
    stMaster = 2
    stResult = 3
    stSettings = 4
End Enum

'処理ステータス
Public Enum ProcessStatus
    psNotStarted = 0
    psProcessing = 1
    psCompleted = 2
    psFailed = 3
End Enum

'ユーザー権限
Public Enum UserRole
    urReadOnly = 1
    urEditor = 2
    urAdmin = 3
End Enum

'使用例
Sub UseEnumConstants()
    Dim status As ProcessStatus
    status = psProcessing
    
    Select Case status
        Case psNotStarted
            Debug.Print "未開始"
        Case psProcessing
            Debug.Print "処理中"
        Case psCompleted
            Debug.Print "完了"
        Case psFailed
            Debug.Print "失敗"
    End Select
    
    '権限チェック
    Dim userRole As UserRole
    userRole = urAdmin
    
    If userRole = urAdmin Then
        Debug.Print "管理者権限あり"
    End If
End Sub

よくある質問(FAQ)7問

Q1. Private ConstとPublic Constはどう使い分ける?

A. 基本はPrivate Constを使い、本当に全モジュールで共有する場合だけPublic Constを使います。

  • Private Const: そのモジュール内だけで使う定数(99%のケース)
  • Public Const: プロジェクト全体で共有する定数(税率、バージョン情報など)

ベストプラクティス: まずはPrivate Constで宣言し、必要になったらPublic Constに変更する


Q2. Constを省略してPrivateだけでもいい?

A. **Constを省略すると変数になってしまいます。**必ずConstを付けてください。

'❌ これは変数(定数ではない)
Private TAX_RATE As Double
TAX_RATE = 0.1  '← 変更可能

'✅ これが定数
Private Const TAX_RATE As Double = 0.1
'TAX_RATE = 0.2  '← エラー!変更不可

Q3. 定数の型は省略できる?

A. 省略可能ですが、明示的に指定することを推奨します。

'型省略(自動判定)
Private Const TAX_RATE = 0.1  '→ Double型と判定される

'型指定(推奨)
Private Const TAX_RATE As Double = 0.1

型を明示すると、コードの可読性が上がり、意図しない型変換を防げます。


Q4. クラスモジュールでPublic Constは使える?

A. 使えません。クラスモジュールではPublic Constは宣言できません。

'▼ Class1(クラスモジュール)

'✅ Private Constは使える
Private Const MAX_VALUE As Long = 100

'❌ Public Constは使えない(エラー)
'Public Const TAX_RATE As Double = 0.1

プロジェクト全体で使う定数は、標準モジュールにPublic Constで宣言してください。


Q5. 定数名は大文字にしないとダメ?

A. 必須ではありませんが、強く推奨されます。

一般的なコーディング規約では、定数は全て大文字+アンダーバーで記述します。これにより、変数と定数を一目で区別できます。

'✅ 推奨: 全て大文字
Private Const TAX_RATE As Double = 0.1
Private Const MAX_ROWS As Long = 1000

'△ 許容: キャメルケース
Private Const TaxRate As Double = 0.1
Private Const MaxRows As Long = 1000

'❌ 非推奨: 小文字(変数と区別がつかない)
Private Const taxRate As Double = 0.1

Q6. 定数は実行時に変更できない?

A. はい、変更できません。実行時に変更する必要がある場合は変数を使ってください。

'定数は実行時に変更不可
Private Const TAX_RATE As Double = 0.1

Sub Test()
    'TAX_RATE = 0.08  '← エラー!
    
    '実行時に変更したい場合は変数を使う
    Dim dynamicTaxRate As Double
    dynamicTaxRate = 0.1
    
    '条件によって変更
    If 条件 Then
        dynamicTaxRate = 0.08
    End If
End Sub

Q7. 複数の定数を一度に宣言できる?

A. できません。定数は1行に1つずつ宣言してください。

'❌ 複数宣言は不可
'Private Const TAX_RATE As Double = 0.1, DISCOUNT_RATE As Double = 0.05

'✅ 1行に1つずつ宣言
Private Const TAX_RATE As Double = 0.1
Private Const DISCOUNT_RATE As Double = 0.05

まとめ

この記事で学んだこと

  • Private Const/Public Const/Constの3つの違いとスコープ
  • ConstとDimの違い(変数 vs 定数)
  • 定数を使うメリット(可読性・メンテナンス性・バグ防止)
  • 定数の命名規則(全て大文字+アンダーバー推奨)
  • 実務で使える定数管理テンプレート
スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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