キャッシュの有効期限をユーザー設定で切り替えられるバージョン
これまでの「キャッシュ有効期限を固定値で設定」からさらに進化させて、ユーザーが自由に有効期限を設定できる仕組みを紹介します。
設定方法は大きく2つ考えられます:
- Configファイル(例:
Config.iniやConfig.json)から読み込む - 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
VBExcelシートのセルから読み込むバージョン
例えば「設定」シートの 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接続文字列」もまとめて管理。
- シートに「キャッシュ更新」ボタンを置いて、ワンクリックで再取得できるようにする。
👉 これで ユーザーが自由にキャッシュの有効期限を設定できる ようになりました。


