Excel VBA | 実務で超使う「離れたセル × 自動化パターン」

VBA
スポンサーリンク

ここでは プリセットをさらに外部ファイル(CSVやJSON)から読み込んで切り替える VBA の例を紹介します。これにより、ユーザーは Excel 内の Config シートを編集する代わりに、外部ファイルを更新するだけで処理パターンを切り替えられるようになります。


外部ファイルの設計例

CSVファイル(例:presets.csv)

Mode,HighlightZero,ReplaceNG,ClearYellow,TargetCol
Pattern1,TRUE,TRUE,FALSE,C
Pattern2,FALSE,TRUE,TRUE,B
Pattern3,TRUE,FALSE,FALSE,D

JSONファイル(例:presets.json)

{
  "Pattern1": { "HighlightZero": true, "ReplaceNG": true, "ClearYellow": false, "TargetCol": "C" },
  "Pattern2": { "HighlightZero": false, "ReplaceNG": true, "ClearYellow": true, "TargetCol": "B" },
  "Pattern3": { "HighlightZero": true, "ReplaceNG": false, "ClearYellow": false, "TargetCol": "D" }
}
JSON

1. CSVから読み込む例

Sub LoadPresetFromCSV()
    Dim fso As Object, ts As Object
    Dim line As String, parts() As String
    Dim presetMode As String
    Dim dict As Object
    
    ' 選択するプリセット名
    presetMode = "Pattern2"
    
    ' CSVファイルを開く
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\Users\YourName\OneDrive\presets.csv", 1)
    
    ' ヘッダー行を読み飛ばす
    ts.ReadLine
    
    ' Dictionaryに格納
    Set dict = CreateObject("Scripting.Dictionary")
    Do Until ts.AtEndOfStream
        line = ts.ReadLine
        parts = Split(line, ",")
        If parts(0) = presetMode Then
            dict("HighlightZero") = (UCase(parts(1)) = "TRUE")
            dict("ReplaceNG") = (UCase(parts(2)) = "TRUE")
            dict("ClearYellow") = (UCase(parts(3)) = "TRUE")
            dict("TargetCol") = parts(4)
            Exit Do
        End If
    Loop
    ts.Close
    
    ' クラスを呼び出して処理
    Dim ws As Worksheet, proc As clsCellProcessor
    Set proc = New clsCellProcessor
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Config" Then
            proc.TargetRange = ws.Range(dict("TargetCol") & "2:" & dict("TargetCol") & ws.Cells(ws.Rows.Count, dict("TargetCol")).End(xlUp).Row)
            If dict("HighlightZero") Then proc.HighlightZero
            If dict("ReplaceNG") Then proc.ReplaceNG
            If dict("ClearYellow") Then proc.ClearYellow
        End If
    Next ws
End Sub
VB

2. JSONから読み込む例(Windows Script Host の JSON パーサを利用)

Sub LoadPresetFromJSON()
    Dim fso As Object, ts As Object
    Dim jsonText As String
    Dim Json As Object, preset As Object
    Dim presetMode As String
    
    ' 選択するプリセット名
    presetMode = "Pattern1"
    
    ' JSONファイルを読み込む
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\Users\YourName\OneDrive\presets.json", 1)
    jsonText = ts.ReadAll
    ts.Close
    
    ' JSONをパース(Microsoft Script Controlや外部ライブラリを利用)
    Set Json = JsonConverter.ParseJson(jsonText) ' ※VBA JSONライブラリを参照
    
    Set preset = Json(presetMode)
    
    ' クラスを呼び出して処理
    Dim ws As Worksheet, proc As clsCellProcessor
    Set proc = New clsCellProcessor
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Config" Then
            proc.TargetRange = ws.Range(preset("TargetCol") & "2:" & preset("TargetCol") & ws.Cells(ws.Rows.Count, preset("TargetCol")).End(xlUp).Row)
            If preset("HighlightZero") Then proc.HighlightZero
            If preset("ReplaceNG") Then proc.ReplaceNG
            If preset("ClearYellow") Then proc.ClearYellow
        End If
    Next ws
End Sub
VB

👉 JSONを扱う場合は「VBA JSONライブラリ(JsonConverter.bas)」を導入するのが一般的です。


応用パターン

  • プリセット切替 → ユーザーは外部ファイルの Mode を変更するだけ
  • 複数ユーザー対応 → 各ユーザーごとにプリセットファイルを持たせる
  • クラウド連携 → OneDrive/SharePoint 上の CSV/JSON を読み込めば、チーム全員で共有可能

練習課題

  1. CSVに「対象シート名リスト」を追加して、特定シートだけ処理するように拡張
  2. JSONに「処理モード(CheckOnly / Fix)」を追加して、チェックだけ or 修正までを切り替える
  3. 外部ファイルを読み込んだ後に「Configシート」に反映して、ユーザーに現在の設定を見せる仕組みを作る

こうして クラス × イベント駆動 × Configシート × 外部ファイル(CSV/JSON) を組み合わせると、ユーザーが外部ファイルを編集するだけで処理パターンを切り替えられる、まさに 実務で超使える自動化フレームワークになります。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました