VBAでシートのセルの色で検索する方法

経理や事務の仕事では、Excelのシート内にある表を加工することが多いかと思います。

 

このような状況で特定の値を検索する時にCtrl+Fで表示される検索ボックスを使う時があったりするでしょう。その検索ボックス内に検索したい値を入力し、「次を検索」を押下します。

 

すると目的の値がシート内に存在していれば検索でき、目的の値が存在するセルにカーソルが移動します。通常は何らかの「文字」を使って検索することがほとんどかと思います。

 

しかし、何らかの色を使って検索したい、という時はないでしょうか。そもそも色でセルを検索できるという方法を知らない人もいるかもしれませんが、Excelではそれができるのです。

 

例えば業務の都合上、削除対象のデータやコピー対象のデータが文字列や数値では区別できない時もあるかもしれません。

 

そのような時に色がついているセルは何らかの目印で、そのセルがあるデータであれば処理対象にできる、という場合もあるでしょう。

 

このような処理をVBAで自動化したいと考えた時にそれができる方法がある、それができるコードが存在するということです。

 

今回はセルの色で検索するVBAのコードについて書いていきます。

セルの色で検索するVBAのコード

以下がセルの色で検索するVBAのコードになります。

Sub Find_Color()

Dim myRange As Range

Application.FindFormat.Clear

Application.FindFormat.Interior.ColorIndex = 6

With ThisWorkbook.Sheets("入力表")

    Set myRange = .Columns("B:B").Find(What:="", SearchFormat:=True)
 
End With
 
If myRange Is Nothing Then

    MsgBox "該当データなし"
    Exit Sub
    
Else

    MsgBox Replace(myRange.Address, "$", "")

End If

End Sub

上記のコードについて順番に説明をしていきます。

 

Sub Find_Color()

この行は、Find_Colorという名前のプロシージャを定義します。

 

Dim myRange As Range

myRangeという名前のRangeオブジェクト変数を宣言します。これは、セルまたはセルの集合を参照するために使用されます。

 

Application.FindFormat.Clear

ExcelのFindFormatオブジェクトをクリアします。これは、次の検索で正しく書式設定できるようにするために、事前にリセットをする処理です。

 

Application.FindFormat.Interior.ColorIndex = 6

検索するセルの内部色を黄色(ColorIndex 6)に設定します。

 

With ThisWorkbook.Sheets(“入力表”)

この行からThisWorkbook.Sheets(“入力表”)オブジェクトを参照するWithブロックを開始します。これは、「入力表」という名前のシートを参照します。

 

Set myRange = .Columns(“B:B”).Find(What:=””, SearchFormat:=True)

この行は、B列全体から指定の書式(黄色の背景色)と一致するセルを検索します。検索できたセルはmyRangeに設定されます。

 

End With

Withブロックを終了します。

 

If myRange Is Nothing Then

この行は、myRangeがNothing(つまり、検索条件に一致するセルが見つからなかった)であるかどうかをチェックするIfステートメントを開始します。

 

MsgBox “該当データなし”

この行は、メッセージボックスを表示し、「該当データなし」というメッセージを表示します。

 

Exit Sub

この行は、サブルーチンを直ちに終了します。

 

Else

この行以下は、IfステートメントのElse部分を開始します。つまり、myRangeがNothingでない場合(検索条件に一致するセルが見つかった場合)に実行されます。

 

MsgBox Replace(myRange.Address, “$”, “”)

この行は、メッセージボックスを表示し、myRangeのアドレス(見つかったセルのアドレス)を表示します。ただし、アドレスから”$”記号は除去されます。

 

End If

Ifステートメントを終了します。

 

End Sub

サブルーチンを終了します

 

以上がセルの色で検索するVBAのコードの説明になります。

まとめ

経理や事務の業務担当者がセルの色を使って何らかのデータを検索する機会というのは少ないのではないでしょうか。

 

教えてもらって初めて「あぁこういう機能もあったんだ!」と驚く人も結構いる気がします。

 

手動でもVBAによる自動化でも検索するための手段が増えると、業務の幅、自動化の幅が広がります。

 

実は色で検索するというやり方はフィルターでもできますし、VBAでもそれができます。このような手法を知ることによって、また自動化の幅が広がるようになります。

 

勉強したり試行錯誤していると色々分かってくることがあるのですが、Excelには「こういうこともできるんだ!」ということが多々あります。

 

それは単純にExcelとしての機能やVBAのコードの組み方でも見つけることができます。

 

本での勉強だけでなく、実際に手を使って色々試行錯誤してみると思わぬ発見があったりします。

あわせて読みたい

コメント