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

VBA
スポンサーリンク

ここでは 外部ファイルを読み込んだプリセットを複数同時に適用(複数モード並列処理) の VBA 例を紹介します。ポイントは「外部ファイル(CSVやJSON)に複数プリセットを定義しておき、選択した複数モードを一度に読み込んで順番に適用する」ことです。


外部ファイルの設計例(CSV)

presets.csv

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

1. 複数モードを選択して並列適用(CSV版)

Sub ApplyMultiplePresetsFromCSV()
    Dim fso As Object, ts As Object
    Dim line As String, parts() As String
    Dim dicts As Collection
    Dim presetNames As Variant
    Dim presetMode As String
    Dim dict As Object
    
    ' 適用する複数モードを指定
    presetNames = Array("Pattern1", "Pattern2")
    
    ' CSVファイルを開く
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\Users\YourName\OneDrive\presets.csv", 1)
    
    ' ヘッダー行を読み飛ばす
    ts.ReadLine
    
    ' 複数プリセットを読み込む
    Set dicts = New Collection
    Do Until ts.AtEndOfStream
        line = ts.ReadLine
        parts = Split(line, ",")
        For Each presetMode In presetNames
            If parts(0) = presetMode Then
                Set dict = CreateObject("Scripting.Dictionary")
                dict("Mode") = parts(0)
                dict("HighlightZero") = (UCase(parts(1)) = "TRUE")
                dict("ReplaceNG") = (UCase(parts(2)) = "TRUE")
                dict("ClearYellow") = (UCase(parts(3)) = "TRUE")
                dict("TargetCol") = parts(4)
                dicts.Add dict
            End If
        Next presetMode
    Loop
    ts.Close
    
    ' クラスを呼び出して複数プリセットを順次適用
    Dim ws As Worksheet, proc As clsCellProcessor, d As Object
    Set proc = New clsCellProcessor
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Config" Then
            For Each d In dicts
                proc.TargetRange = ws.Range(d("TargetCol") & "2:" & d("TargetCol") & ws.Cells(ws.Rows.Count, d("TargetCol")).End(xlUp).Row)
                If d("HighlightZero") Then proc.HighlightZero
                If d("ReplaceNG") Then proc.ReplaceNG
                If d("ClearYellow") Then proc.ClearYellow
            Next d
        End If
    Next ws
End Sub
VB

👉 このコードでは Pattern1 と Pattern2 を同時に適用。シートごとに対象列を切り替えながら処理します。


2. JSON版(複数モード適用)

Sub ApplyMultiplePresetsFromJSON()
    Dim fso As Object, ts As Object
    Dim jsonText As String
    Dim Json As Object, preset As Object
    Dim presetNames As Variant
    Dim ws As Worksheet, proc As clsCellProcessor
    Dim mode As Variant
    
    ' 適用する複数モード
    presetNames = Array("Pattern1", "Pattern3")
    
    ' JSONファイルを読み込む
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile("C:\Users\YourName\OneDrive\presets.json", 1)
    jsonText = ts.ReadAll
    ts.Close
    
    ' JSONをパース(JsonConverter.basなどのライブラリが必要)
    Set Json = JsonConverter.ParseJson(jsonText)
    
    Set proc = New clsCellProcessor
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Config" Then
            For Each mode In presetNames
                Set preset = Json(mode)
                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
            Next mode
        End If
    Next ws
End Sub
VB

👉 JSON版では Pattern1 と Pattern3 を同時適用。外部ファイルの定義を柔軟に使えます。


応用パターン

  • 複数モードを並列適用 → 1シートに対して複数処理を順番に実行
  • ユーザー選択 → Configシートに「適用モードリスト」を書いておき、それを読み込む
  • 外部ファイル共有 → OneDrive/SharePoint 上の CSV/JSON を使えばチーム全員で同じプリセットを共有可能

練習課題

  1. Configシートに「適用モードリスト」を追加して、ユーザーが複数モードを選べるようにする
  2. 複数モードを「順次適用」ではなく「結果をマージ」して一括出力するコードを作る
  3. JSONに「優先度」フィールドを追加して、優先度順に処理を並列適用する仕組みを作る

こうして クラス × イベント駆動 × 外部ファイル × 複数モード並列処理 を組み合わせると、ユーザーが外部ファイルを編集するだけで複数の処理パターンを同時に適用できる、まさに 実務で超使える自動化フレームワークになります。

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