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

VBA
スポンサーリンク

ここまでの イベント駆動型(Workbook_Open) をさらに拡張して、ユーザーが設定シート(例:Config)に書いた内容を読み込んで処理内容を切り替える仕組みを作りましょう。これで「ユーザーが設定を変えるだけで自動処理の挙動を切り替えられる」柔軟なフレームワークになります。


Configシートの設計例

Config シートに以下のような設定を置くとします:

設定項目説明
HighlightZeroTRUE金額ゼロセルを赤枠で囲む
ReplaceNGFALSENGセルをOKに変換する
ClearYellowTRUE背景色が黄色のセルをクリア
TargetColumnC処理対象列(例:C列=金額列)

1. クラスモジュール(clsCellProcessor)

(前回の例に加えて「ClearYellow」も追加済み)

' clsCellProcessor クラスモジュール
Option Explicit

Private pTargetRange As Range

Public Property Set TargetRange(rng As Range)
    Set pTargetRange = rng
End Property

Public Sub HighlightZero()
    Dim c As Range
    For Each c In pTargetRange
        If c.Value = 0 Then
            c.BorderAround ColorIndex:=3, Weight:=xlMedium
        End If
    Next c
End Sub

Public Sub ReplaceNG()
    Dim arr As Variant
    Dim i As Long
    
    arr = pTargetRange.Value
    For i = 1 To UBound(arr, 1)
        If arr(i, 1) = "NG" Then
            arr(i, 1) = "OK"
        End If
    Next i
    pTargetRange.Value = arr
End Sub

Public Sub ClearYellow()
    Dim c As Range
    For Each c In pTargetRange
        If c.Interior.Color = vbYellow Then
            c.ClearContents
        End If
    Next c
End Sub
VB

2. ThisWorkbook モジュール(イベント駆動型)

Private Sub Workbook_Open()
    Dim ws As Worksheet
    Dim proc As clsCellProcessor
    Dim cfg As Worksheet
    Dim targetCol As String
    Dim doHighlightZero As Boolean, doReplaceNG As Boolean, doClearYellow As Boolean
    
    ' Configシートを参照
    Set cfg = ThisWorkbook.Sheets("Config")
    doHighlightZero = (UCase(cfg.Range("B2").Value) = "TRUE")
    doReplaceNG = (UCase(cfg.Range("B3").Value) = "TRUE")
    doClearYellow = (UCase(cfg.Range("B4").Value) = "TRUE")
    targetCol = cfg.Range("B5").Value
    
    Set proc = New clsCellProcessor
    
    ' 全シートに対して処理
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Config" Then
            proc.TargetRange = ws.Range(targetCol & "2:" & targetCol & ws.Cells(ws.Rows.Count, targetCol).End(xlUp).Row)
            
            If doHighlightZero Then proc.HighlightZero
            If doReplaceNG Then proc.ReplaceNG
            If doClearYellow Then proc.ClearYellow
        End If
    Next ws
End Sub
VB

動作イメージ

  • ブックを開いた瞬間に Workbook_Open が走る
  • Config シートの設定値を読み込む
  • TRUE/FALSE に応じて処理を切り替える
  • 対象列もユーザーが自由に変更可能

実務でのメリット

  • ユーザーが設定を変えるだけで挙動を切り替え可能
  • コード修正不要 → 運用現場で柔軟に対応できる
  • 複数処理を組み合わせ可能 → TRUE/FALSE の組み合わせで自在に制御

練習課題

  1. Configシートに「対象シート名」を追加して、特定シートだけ処理するように拡張
  2. Configシートに「処理開始行・終了行」を追加して範囲を制御
  3. Configシートに「処理モード(例:CheckOnly / Fix)」を追加して、チェックだけ or 修正までを切り替える

こうして クラス × イベント駆動 × Configシート を組み合わせると、ユーザーが設定を変えるだけで自動処理の挙動を自在に切り替えられる、まさに 実務で超使える自動化フレームワークになります。

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