ここまでの Union / Areas を使った離れたセル範囲処理 をさらにクラス化して、再利用可能な形にしてみましょう。これにより「複数の離れた範囲をまとめて処理する」ロジックを一箇所に集約でき、プロジェクト全体で使い回せます。
クラスモジュール例 clsRangeProcessor
1. クラスモジュールコード
' clsRangeProcessor クラスモジュール
Option Explicit
Private pTargetRange As Range
' 対象範囲を設定(Unionでまとめた範囲も渡せる)
Public Property Set TargetRange(rng As Range)
Set pTargetRange = rng
End Property
' 背景色を一括変更
Public Sub SetBackgroundColor(ByVal colorValue As Long)
If Not pTargetRange Is Nothing Then
pTargetRange.Interior.Color = colorValue
End If
End Sub
' 値を一括置換(例:NG→OK)
Public Sub ReplaceValue(ByVal findValue As Variant, ByVal replaceValue As Variant)
Dim arr As Variant
Dim i As Long, j As Long
If Not pTargetRange Is Nothing Then
arr = pTargetRange.Value
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
If arr(i, j) = findValue Then
arr(i, j) = replaceValue
End If
Next j
Next i
pTargetRange.Value = arr
End If
End Sub
' 各Areasごとに処理(例:赤枠)
Public Sub BorderEachArea()
Dim area As Range
If Not pTargetRange Is Nothing Then
For Each area In pTargetRange.Areas
area.BorderAround ColorIndex:=3, Weight:=xlMedium
Next area
End If
End Sub
VB標準モジュールからの呼び出し例
Sub 実務処理例()
Dim ws As Worksheet
Dim proc As clsRangeProcessor
Dim rng1 As Range, rng2 As Range, rng3 As Range, target As Range
Set ws = ActiveSheet
Set rng1 = ws.Range("A1:A10")
Set rng2 = ws.Range("C1:C10")
Set rng3 = ws.Range("E1:E10")
' 離れた範囲をUnionでまとめる
Set target = Union(rng1, rng2, rng3)
' クラスのインスタンス生成
Set proc = New clsRangeProcessor
proc.TargetRange = target
' 背景色を黄色に
proc.SetBackgroundColor vbYellow
' NG→OKに置換
proc.ReplaceValue "NG", "OK"
' 各Areasごとに赤枠
proc.BorderEachArea
End Sub
VB応用パターン
- Unionでまとめた範囲をクラスに渡す → 離れた列やセルを一括処理
- Areasをクラス内で処理 → SpecialCellsで抽出した複数範囲をまとめて処理
- 配列処理をクラスに集約 → 値変換を爆速で再利用可能
クラス化のメリット
- 再利用性:同じ処理を複数プロジェクトで使い回せる
- 保守性:処理ロジックをクラスに集約 → 修正は一箇所で済む
- 可読性:標準モジュール側は「何をするか」だけ書けるのでスッキリ
練習課題
clsRangeProcessorに「背景色が赤のセルだけ削除」メソッドを追加してみる- 「複数列をまとめて配列処理する」メソッドを追加してみる
- 「複数シートの売上列を合計して返す」メソッドを追加してみる
こうして Union / Areas × クラス化 を組み合わせると、離れたセル範囲をまとめて処理する仕組みを再利用可能なライブラリとして構築できます。

