【ExcelVBA・マクロ】色付きセルだけを抽出して一覧を作るマクロ|色でデータをまとめて表示(便利実務コード)

色付きセルだけを抽出して一覧を作るマクロ ExcelVBA

Excelで色を付けて管理しているデータを扱うとき、手作業で一覧を作ると大変ではありませんか?
例えばこんなケースがあります。

  • 色付きのセルだけを抽出して一覧で見たい
  • 赤色は注意データ、緑色は完了データなど、色で意味づけして管理している
  • 色のついたセルだけを別シートにまとめたい

Excelの標準機能だけでやると手間がかかりますが、VBAを使えば一瞬で抽出・一覧化この記事では、指定の色だけを抽出して、別シートに一覧として出力する VBA マクロを初心者にも分かりやすく解説します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • 指定した色付きセルだけを抽出する
  • 色付きセルの位置・値を一覧シートにまとめる
  • 色を元に色分けしてセルをコピーする
  • 業務でよくある「色管理」を VBA で楽にする

色付きセル抽出の基本コード(コピペOK)

まずは、次のコードを標準モジュールに貼り付けてください。
このコードは「アクティブシートの UsedRange の中から指定色だけを抽出」して、 新しい一覧シートに出力するものです。

Option Explicit

Sub ExtractByColor()

    Dim ws As Worksheet
    Dim destWs As Worksheet
    Dim cell As Range
    Dim nextRow As Long
    Dim colorIndex As Long

    ' ===== 抽出したい色インデックスを指定 =====
    ' 例:黄色 = 6、赤 = 3 など
    colorIndex = 6

    Set ws = ActiveSheet

    ' 出力先シートを準備
    On Error Resume Next
    Set destWs = Worksheets("色抽出一覧")
    On Error GoTo 0

    If destWs Is Nothing Then
        Set destWs = Worksheets.Add
        destWs.Name = "色抽出一覧"
    Else
        destWs.Cells.Clear
    End If

    ' ヘッダー作成
    destWs.Range("A1").Value = "元シート"
    destWs.Range("B1").Value = "セル位置"
    destWs.Range("C1").Value = "値"

    nextRow = 2

    ' UsedRange をループ
    For Each cell In ws.UsedRange

        If cell.Interior.ColorIndex = colorIndex Then

            destWs.Cells(nextRow, 1).Value = ws.Name
            destWs.Cells(nextRow, 2).Value = cell.Address
            destWs.Cells(nextRow, 3).Value = cell.Value

            nextRow = nextRow + 1

        End If

    Next cell

    MsgBox "完了!色付きセルを一覧化しました。", vbInformation

End Sub

色インデックスとは?(初心者向け解説)

VBA では、セルの背景色は ColorIndex という番号で扱われます。
例えば次のような色番号があります(代表例)。

  • 黄:6
  • 赤:3
  • 緑:4
  • 水色:36

色を指定したいときは、この colorIndex = 6 の箇所を書き換えてください。
Excel 上で色を設定して確かめると便利です。


実行手順(初心者でも簡単)

  1. 対象となるシートを選択する
  2. Alt + F11 で VBA エディタを開く
  3. 挿入 → モジュール で新しい標準モジュールを作る
  4. 上のコードを貼り付ける
  5. マクロを実行する(F5 など)

実行が終わると、新しいシート「色抽出一覧」ができて、 指定色のセル情報(元シート・位置・値)が一覧になっています。


応用①:複数色を対象にする方法

例えば黄色・赤色・緑色のいずれかの色を抽出したい場合は、 次のように色判定を複数に変更できます。

If cell.Interior.ColorIndex = 6 Or _
   cell.Interior.ColorIndex = 3 Or _
   cell.Interior.ColorIndex = 4 Then
    ' 一致したら一覧に記録
End If

こうすると、複数の色をまとめて抽出できます。


応用②:色ごとに塗りつぶしてコピーする

一覧シートにコピーするとき、色もそのまま引き継ぎたい場合は次のように書きます。

destWs.Cells(nextRow, 3).Value = cell.Value
destWs.Cells(nextRow, 3).Interior.Color = cell.Interior.Color

値だけでなく色もコピーされるので、一覧に色で視覚的な区別がつきます。


実務でよくある活用シーン

  • 色で管理されたデータ(色が意味を持つ)の抽出
  • 条件付き書式では対応できない手作業の色分けを集計
  • 色×他の条件の複合条件で集計前処理に使う

まとめ:色管理をVBAで簡単に一覧化しよう

Excelのセルに色で意味づけしているとき、VBA を使えば 手作業では大変な色抽出を一発で実行できます。 これは、条件付き書式ではできない「色そのもので処理する」パワフルなコードです。

ぜひ「色で管理しているシート」を対象に実行してみてください。 作業時間が大幅に短縮できます!

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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