Excel VBAで2つの表を比較して条件付きでセルを着色する方法|ColorIndexを使ったマクロ作成例

Visual Basic

Excel VBAでは、セルの値だけでなく「セルの色」を条件として比較し、自動着色することも可能です。特に業務用シートでは、色による管理を行っているケースも多く、条件に応じて別表へ色を反映させたい場面があります。この記事では、2つの表を比較し、特定色のセルだけを別表へ自動着色するVBAマクロの作り方を、Excel 2016対応でわかりやすく解説します。

今回実現したい処理内容

今回の例では、4列10行の表Aと表Bを比較します。

項目 内容
表A 青色セルが存在する
表B 無着色セルが存在する
条件 A表が青、かつB表が無着色ならB表を黄色にする

なお、B表の数字や罫線は消さず、セルの背景色のみ変更します。

完成するVBAマクロコード

以下のコードを標準モジュールへ貼り付けることで実行できます。

Sub CompareColorTables()    Dim ws As Worksheet    Dim startCell As Range    Dim cellA As Range    Dim cellB As Range    Dim r As Long    Dim c As Long    Set ws = ActiveSheet    ' A表左上セルを取得    Set startCell = ActiveCell    ' 4列×10行を比較    For r = 0 To 9        For c = 0 To 3            Set cellA = startCell.Offset(r, c)            ' B表は2列空きなので+6列            Set cellB = startCell.Offset(r, c + 6)            ' Aが青(ColorIndex 33)            ' Bが無着色            If cellA.Interior.ColorIndex = 33 And _               cellB.Interior.ColorIndex = xlNone Then                ' Bを黄色(ColorIndex 27)                cellB.Interior.ColorIndex = 27            End If        Next c    Next r    MsgBox "処理が完了しました。"End Sub

マクロの使い方

まず、ExcelでAlt + F11を押し、VBE(Visual Basic Editor)を開きます。

次に「挿入」→「標準モジュール」を選択し、コードを貼り付けます。

その後、Excel画面へ戻り、A表の左上セルをクリックしてからマクロを実行します。

A表左上を基準にして処理が始まるため、クリック位置が重要です。

なぜB表は+6列なのか

今回の条件では、A表とB表の間に2列空いています。

さらにA表自体が4列なので、B表は以下の位置になります。

内容 列数
A表 4列
空白列 2列
合計移動量 6列

そのため、Offset(r, c + 6)でB表位置を取得しています。

ColorIndexとは?

Excel VBAでは、セル色をColorIndexで管理できます。

ColorIndex
33 青系
27 黄色系
xlNone 塗りつぶし無し

Excelのテーマや環境によって多少色味が異なる場合があります。

罫線や数字が消えない理由

今回のコードでは変更しているのは以下のみです。

cellB.Interior.ColorIndex = 27

Interiorは「セル背景色」のみを変更します。

そのため、文字・数値・罫線・数式などには一切影響しません。

応用するとできること

この仕組みを応用すると、さまざまな自動色分け処理が可能になります。

  • 進捗管理表の色反映
  • 在庫状況の可視化
  • 条件付き警告表示
  • 比較表の差分マーキング
  • 工程管理シート作成

特にColorIndex比較は、業務用Excelで非常によく使われます。

処理範囲を変更したい場合

現在は4列10行固定です。

For r = 0 To 9For c = 0 To 3

例えば20行にしたい場合は以下のように変更します。

For r = 0 To 19

列数も同様に調整できます。

実行前の注意点

マクロ実行前にはファイルをバックアップしておくと安心です。

また、Excelのマクロ設定が無効になっている場合は、マクロを有効化する必要があります。

まとめ

Excel VBAでは、セルの色を条件として比較し、自動で別セルへ色を反映させることができます。

今回のマクロでは、A表の青セルとB表の無着色セルが重なった位置のみ、B表を黄色に着色する処理を実現しました。

ColorIndexを使った色判定は、Excel業務自動化で非常に便利な技術です。基本を覚えると、複雑な比較シートや管理表にも応用できるようになります。

コメント

タイトルとURLをコピーしました