トップ > 汎用コード > 指定の色のセルを一括取得

指定の色のセルを一括取得2023.06.18

アクティブシートの中から指定の色のセルを一括取得するマクロです。
色の指定はコード内で行います。

マクロを実行すると、プロシージャ「GetCellsWithSpecifiedColor」に移り、そのプロシージャの中で、アクティブシート内の指定の色のセルを検索します。
指定の色のセルが見つかった場合、プロシージャの戻り値であるRangeオブジェクトに、見つかったセルの集合が設定されます。
指定の色のセルが見つからなかった場合やエラーの場合は、戻り値のRangeオブジェクトにNothingが設定されます。

■参考動画
アクティブシートから赤色のセルを検索し セルの個数とセルのアドレスを表示する
(動画内の個人情報は全てダミーデータです)


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

サンプルコード2023.06.18

コードの貼り付け場所   VBAコードをカラーで印刷・Web掲載するためのツールはこちら

'-----------------------------------------------------------------------
' 実行マクロ
'-----------------------------------------------------------------------
Sub ExampleOfUse_GetCellsWithSpecifiedColor()

    '色の指定
    Dim lngColor As XlRgbColor
    lngColor = rgbRed '赤を指定 RGB関数を使用する例:lngColor = RGB(255, 0, 0)

    'プロシージャを実行
    Dim rngResult As Range
    Set rngResult = GetCellsWithSpecifiedColor(ActiveSheet.Cells, lngColor)
    
    '結果表示
    If rngResult Is Nothing Then
        MsgBox "該当のセルは見つかりませんでした", vbInformation
    Else
        MsgBox "セル個数:" & rngResult.Cells.CountLarge & vbLf & _
               "セルアドレス:" & rngResult.Address(False, False), _
               vbInformation
        '色を一括でクリアする場合には次の行をコメントアウトにする
        'rngResult.Interior.Color = xlNone
    End If
End Sub

'----------------------------------------------------------------------- ' 対象セル範囲の中から指定の色のセルを取得するプロシージャ '----------------------------------------------------------------------- '[引数] ' Target:検索対象セル範囲 ' Color :文字列に設定する色番号 '[戻り値] ' 検索に一致したセルの集合 ' 検索に一致したセルがないやエラーの場合はNothing '[作成日]2023/06/18 'https://excel.syogyoumujou.com/vba/GetCellsWithSpecifiedColor.html '----------------------------------------------------------------------- Function GetCellsWithSpecifiedColor(ByVal Target As Range, _ ByVal Color As XlRgbColor) As Range On Error GoTo ERROR_HANDLER 'Target にセルが設定されていなければ抜ける If Target Is Nothing Then Exit Function '対象セル範囲を最適化 Set Target = Application.Intersect(Target, Target.Parent.UsedRange) 'Target にセルが設定されていなければ抜ける If Target Is Nothing Then Exit Function '書式検索の設定 With Application.FindFormat .Clear .Interior.Color = Color End With '検索値を格納 Dim varWhat As Variant varWhat = Array("", "*") '検索開始 Dim i As Long Dim strAddress As String Dim rngFnd As Range Dim rngUnion As Range For i = LBound(varWhat) To UBound(varWhat) '対象セル範囲を指定のセル背景色で検索 Set rngFnd = Target.Find(What:=varWhat(i), SearchFormat:=True) If Not rngFnd Is Nothing Then '最初のセルのアドレス格納 strAddress = rngFnd.Address '集合用のセルにセルを設定 If rngUnion Is Nothing Then Set rngUnion = rngFnd Else Set rngUnion = Union(rngUnion, rngFnd) End If Do '次のセルを検索 Set rngFnd = Target.Find(What:=varWhat(i), _ After:=rngFnd, _ SearchFormat:=True) '最初のセルとアドレスが同じの場合は抜ける If rngFnd.Address = strAddress Then Exit Do '新たに見つかったセルを集合する Set rngUnion = Union(rngUnion, rngFnd) Loop End If Next Set GetCellsWithSpecifiedColor = rngUnion On Error GoTo 0 Exit Function ERROR_HANDLER: End Function

GetCellsWithSpecifiedColorプロシージャの引数

Target
検索対象のRangeオブジェクトを設定します。

Color
検索対象とする色を指定します。
型はExcelの組み込み定数XlRgbColorとなり、引数の設定時にリスト表示されます。
ただ、リストで設定しなくても、対応する色番号を直接指定したり、RGB関数で指定することもできます。

GetCellsWithSpecifiedColorプロシージャの戻り値

戻り値には、検索に一致したセルの集合がRangeオブジェクトと設定されます。
検索に一致するセルがなかったり、エラーになった場合は、RangeオブジェクトにNothingが設定されます。
Rangeオブジェクトにはセルの集合が返るため「検索に一致したセルの背景色を一括でクリアする」といったような、プロパティの設定を一括で行えます。

ページトップへ戻る

Excel 汎用コード

Copyright(C) 2009- 坂江 保 All Rights Reserved.