Excel VBA | フィールド定義表から自動でチェックを組み立てる仕組み(メタデータ駆動)

Excel VBA VBA
スポンサーリンク

キャッシュの有効期限をユーザー設定で切り替えられるバージョン

これまでの「キャッシュ有効期限を固定値で設定」からさらに進化させて、ユーザーが自由に有効期限を設定できる仕組みを紹介します。
設定方法は大きく2つ考えられます:

  1. Configファイル(例:Config.iniConfig.json)から読み込む
  2. Excelシートのセルに有効期限(日数)を記入して参照する

想定するConfigファイル(例:Config.ini)

[Cache]
ExpireDays=3

VBAコード例(Configファイル読み込み)

Option Explicit
Private g_FieldDefs As Collection
Private Const CACHE_FILE As String = "FieldDefCache.json"
Private g_CacheExpireDays As Long

' --- 有効期限をConfigファイルから読み込む ---
Function LoadConfigExpireDays() As Long
    Dim fso As Object, ts As Object, line As String, parts As Variant
    Dim path As String
    path = ThisWorkbook.Path & "\Config.ini"
    
    ' デフォルト値
    LoadConfigExpireDays = 1
    
    If Dir(path) = "" Then Exit Function
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(path, 1, False, -1)
    
    Do Until ts.AtEndOfStream
        line = Trim(ts.ReadLine)
        If InStr(line, "ExpireDays=") > 0 Then
            parts = Split(line, "=")
            If IsNumeric(parts(1)) Then
                LoadConfigExpireDays = CLng(parts(1))
            End If
        End If
    Loop
    ts.Close
End Function

' --- 定義を取得(キャッシュ優先、期限切れなら再取得) ---
Function GetFieldDefinitions() As Collection
    If g_FieldDefs Is Nothing Then
        Dim cachePath As String, cacheDate As Date
        cachePath = ThisWorkbook.Path & "\" & CACHE_FILE
        
        ' 有効期限を読み込み
        g_CacheExpireDays = LoadConfigExpireDays()
        
        ' JSONキャッシュがあれば読み込み
        If Dir(cachePath) <> "" Then
            Dim defs As Collection
            Set defs = LoadDefsFromJSON(cachePath, cacheDate)
            
            ' 有効期限チェック
            If Now - cacheDate <= g_CacheExpireDays Then
                Set g_FieldDefs = defs
            End If
        End If
        
        ' キャッシュが無効ならDBから再取得
        If g_FieldDefs Is Nothing Then
            Set g_FieldDefs = LoadDefsFromDB()
            SaveDefsToJSON g_FieldDefs, cachePath
        End If
    End If
    Set GetFieldDefinitions = g_FieldDefs
End Function
VB

Excelシートのセルから読み込むバージョン

例えば「設定」シートの B2セル に有効期限(日数)を入力しておくとします。

Function LoadExpireDaysFromSheet() As Long
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets("設定")
    On Error GoTo 0
    
    If ws Is Nothing Then
        LoadExpireDaysFromSheet = 1 ' デフォルト
    Else
        If IsNumeric(ws.Range("B2").Value) Then
            LoadExpireDaysFromSheet = CLng(ws.Range("B2").Value)
        Else
            LoadExpireDaysFromSheet = 1
        End If
    End If
End Function
VB

この関数を GetFieldDefinitions 内で呼び出せば、ユーザーがセルを編集するだけで有効期限を切り替えられます。


ポイント

  • Configファイル方式 → Excelを開かなくても設定変更可能。
  • セル指定方式 → ユーザーがGUI感覚で簡単に変更可能。
  • デフォルト値 を必ず用意しておくと安心。

応用アイデア

  • 有効期限を「日数」だけでなく「時間単位」で指定できるようにする。
  • Configに「キャッシュ保存先フォルダ」や「DB接続文字列」もまとめて管理。
  • シートに「キャッシュ更新」ボタンを置いて、ワンクリックで再取得できるようにする。

👉 これで ユーザーが自由にキャッシュの有効期限を設定できる ようになりました。

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