VBA

Findメソッドの使い方(応用編1):書式検索で、背景色や文字色で検索する方法

このページでわかること

Findメソッドを使って書式(背景色、文字色)の検索ができます。

背景色の簡単な調べ方、設定の仕方がわかります。

覚えること

  1. 書式の検索:
    Findメソッドの引数SerchFormatをTrueにする
    FindFormatプロパティを使用して書式の設定を行う
  2. 背景色の設定の仕方:
    オブジェクト.Interior.color=RGB(赤,緑,青)
    エクセルのホームタブから簡単に調べられます。

書式(背景色、文字色など)の検索

背景色や文字の色で検索をする機会あると思います。
やってみましょう。

流れとしては以下の通りに行います。

  1. FindFormatプロパティで書式の初期化
  2. FindFormatプロパティで書式の設定
  3. Findmethodで検索(引数SeachFormatをtrueにする)

FindFormatプロパティとは

FindFormatプロパティとは
書式の設定を行うことができるプロパティです。

構文:Application.FindFormat

よく使うコードをご紹介します。

コード説明
Application.FindFormat.Clear検索の書式を初期化
Application.FindFormat.Interior.Color背景色を指定
(例)Application.FindFormat.Interior.Color=vbYellow
Application.FindFormat.Font.Color文字の色を指定
(例)Application.FindFormat.Font.Color=vbYellow
Application.FindFormat.Font.Bold文字の色を指定
(例)Application.FindFormat.Font.Bold=True

注意!
Application.FindFormat.Clear で
毎回初期化する方が無難です。

書式は前回の検索の状態を維持するようになっていますので、
履歴を毎回消すようにしましょう。

私はこれを忘れて職場の方々から「検索ができなくなったと」御叱りを受けたことがあります。

ではコードを見ていきましょう。
下記のような表を作り、
背景色を黄色に塗ったセルの値をメッセージボックスに表示させます。

表はテーブル化してます。わかりやすいように余計な色は消しておきました。
Sub findmethodColor()

Dim table As ListObject
Set table = ActiveSheet.ListObjects(1)

Dim srcRng As Range '検索する範囲
Dim fndRng As Range 'findメソッドで検索するセル範囲
Set srcRng = table.Range 'テーブル化した範囲全部

With Application.FindFormat
    .Clear '書式の初期化
    .Interior.Color = RGB(255, 255, 0) '背景色を黄色に設定
End With

'検索する値は全て("*"とする)、searchformatをTrueにする
Set fndRng = srcRng.Find(what:="*", lookat:=xlWhole, searchformat:=True)

MsgBox ("黄色に塗られたのは:" & fndRng.Value)
End Sub

色の調べ方(RGB)

背景色の色指定をRGBで指定していますが、
おすすめです。

色指定の方法は色々ありますが、
よく使われるのがvbYellowなど色を文字で指定する方法です。

私はこれあまり好きでなく、
色の見間違いやそもそも何て色だっけって検索するのが面倒なので
あまり使いません

RGBだと簡単に調べられます。
その方法をご紹介します。

ユーザー設定タブを選び、RGBを確認。この場合はRGB(255,255,0)となる

話がそれましたが、結果は

いかがでしょうか。

背景色や文字の色を使って検索する方法を知っていると
情報密度が高い表を作ることができます。

例えばこの数値は集計に加えたいみたいなものを黄色く塗っておいて、
後で検索して合算するとか

次回はその他の特殊な検索方法と検索対象を全部検索する方法をご紹介します。

ではでは