findメソッド

【VBA】FindFormatプロパティとFindメソッドを使って書式検索(背景色、文字色、結合セル、太字等)

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

いくつかFindメソッド関連の記事を書いてきました。

正直Findメソッドは扱いが難しいところもあるのですが、
今回の記事はFindメソッドだからこそできる機能です。

Findメソッドは設定をいじることで
書式検索が可能になります。

例えば以下のような検索が可能です。

  • 結合しているセルがあるかどうかをチェック、
    あればその位置を特定
  • 背景色が黄色のセルだけ値を取得したい
  • フォントサイズを大きくしているセルを取得したい
  • 特定のフォントで書いているセルを検索したい

業務によっては結構使う機会がありそうじゃないですか?

しかもこの条件は簡単に自分で調べることが可能です。
最後まで読んでいただければ自分で書式検索を簡単にマスタできます!!

Findメソッドについていくつか記事を書いています。
よかったら見てやってください。

FindFormatとは

FindFormatって何?

FindFormatはFindメソッドで検索するセルの書式を
絞り込むことができます。

エクセルで 「Ctrl + F」 を押すと
検索ダイアログボックスが出てきますが、
そのなかの書式設定をVBAを使っていじるイメージです。

この書式設定をいじって
最終的にはFindメソッドで検索をかけるという流れです。
具体的にはFindメソッドの「SearchFormat」という引数を「True」に変えます。

つまり、

  1. FindFormatで設定をいじる
  2. FindメソッドのSearchFormat:=Trueにして
    FindFormatの設定を活かして検索する

FindFormatはちょっと特殊なので
注意してください。

基本構文

Application.FindFormat . [メソッド or プロパティ]

Application.FindFormatの後ろにつけるプロパティの状態を変更したり、確認したりすることが可能です。

代表的なメソッドやプロパティの変更を表にしました。
※コードはApplication.FindFormatの後ろです
全部書くと長いので省略しています。

コード説明
.Clear書式設定をクリア.Clear
.Interior.Color背景色を指定.Interior.Color = vbYellow
.Font.Color文字の色を指定.Font.Color=vbYellow
.Font.Bold太字指定.Font.Bold=True
.MergeCells結合セル.MergeCells = True

代表的な検索方法

下記のような図で書式検索を実行してみます。

検索時余計な意図しない書式設定にならないように
毎回 Application.FindFormat.clear
は入れておいた方がいい

背景色を指定して検索

Sub format_test1()

With Application.FindFormat
    .clear
    .Interior.Color = vbYellow
End With

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

Debug.Print ws.Range("A1:C6").Find(What:="", searchformat:=True).Address
'>>$A$3

ws.Range("A1:C6").Find(What:="", searchformat:=True).Borders.Color = vbRed
End Sub
赤枠で囲んだセルを取得しています。

太字のセルを検索

Sub format_test2()

With Application.FindFormat
    .clear
    .Font.Bold = True
End With

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

Debug.Print ws.Range("A1:C6").Find(What:="", searchformat:=True).Address
'>>$A$2

ws.Range("A1:C6").Find(What:="", searchformat:=True).Borders.Color = vbRed
End Sub
赤枠で囲んだセルを取得しています。

結合しているセルを検索

Sub format_test3()

With Application.FindFormat
    .clear
    .MergeCells = True
End With

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

Debug.Print ws.Range("A1:C6").Find(What:="", searchformat:=True).Address
'>>$A$5

ws.Range("A1:C6").Find(What:="", searchformat:=True).Borders.Color = vbRed
End Sub

自分で書式検索の設定を調べる方法

使い方はそんなに難しくはないと思いますが、
設定条件が細かすぎるので全てを紹介することはできません。

特にフォント名の指定なんかもできるので
全て列挙するのは不可能です。

自分で書式検索の設定をいじれるようになる方法をご紹介します。

マクロの記録を有効活用しましょう。

①開発タブの「マクロの記録」をクリックしましょう。

②ダイアログボックスが出現するのでOK

③Ctrl + F で検索ダイアログボックスを出現させ
書式をクリック、あとは設定したい項目をクリックしてOK

④最後は記録終了をクリックして終了

⑤マクロを確認して、プロパティの設定の仕方を確認
※不要なコードも入ってくるので、適切にカットして使用

Sub Macro1()
'
' Macro1 Macro
'

'
    With Application.FindFormat.Font
        .Name = "Meiryo UI"
        .Subscript = False
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
End Sub

注意点

Findメソッドの引数は適切に処理

Findメソッドは使い方がやや難しく、
特に引数の管理に癖があります。

引数には注意して使用してください。
下記の記事にFindメソッドの基本的な使い方や
見つからない場合の処置をまとめています。

【VBA】Findメソッドの基本的な使い方(引数の使い方、戻り値、注意点と代替手段) このページでわかること Findメソッドの基本構文(引数、戻り値) 引数を省略した場合どうなるか? Findメソッドの注...
【VBA Findメソッド】あるのに見つからない場合に試すこと4選。エラー回避と代替手段 このページでわかること Findメソッドは見つからない場合、続けて処理するとエラーが生じる可能性がある。→エラー回避方法を紹介 ...

FindFormatのプロパティは毎回クリアする

上記でも触れましたが、
基本的に前回の書式設定は残りますので
毎回クリアしてからの使用が無難です。

また、使用後も書式設定をクリアするべきです。

厳密にはFindメソッドでSearchFormatをTrueにしなければ
影響はありません。

ただし、エクセルからCtrl + Fで検索ダイアログボックスを開いて検索する場合は
がっちり書式設定が残っており、業務に支障をきたすので
マナーとして書式設定クリアはしておきましょう。

Application.FindFormat.Clear
は使用前、使用後に入れることを推奨

色の指定をするお勧めの方法

個人的にFindFormatを使用する一番の理由は文字や背景色の検索です。

そもそも色検索を否定する人も多いですし、
私も積極的にお勧めはしませんが、
実務上色で処理をかえるなんてことはあるあるじゃないかと思います。

実際、私も背景色をトリガーに
処理の分岐をするプログラムを書いたこともあります。

そんな色検索ですが、
まともに色指定の設定を選んでいると非効率的です。
大きく二つ方法をご提示します。

RGBを調べてコーディング

色を指定する方法はいろいろありますが、
RGBはノーコードで比較的簡単に調べられます。

①調べたいセルを選択し、ホームタブの「塗りつぶしの色」から色情報にアクセス

②RGBの情報が取得できるのでそれをメモしてコーディング

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

カラーチャートを活用する

もうひとつはカラーチャートを用意してその中から
色を指定していく方法です。

これはエクセルの運用を一からできる人向けですが、
VBAのコーディングも考慮した総合的な管理ができ、
結果、壊れにくいプログラムを作ることができます。

カラーチャートはネットで調べたりすれば出てきますが、
いちいちブラウザ開いて調べるのも面倒なので、
カラーチャートを呼び出す関数を作りました。

【VBA】カラー定数の一覧表を取得する関数 こんにちは、hokkyokunです。 VBAで背景色や文字色を考える際にあらかじめ組み込まれているカラー定数というものがあります...
【VBA】カラーチャートを作成する関数(カラーインデックス一覧、RGB一覧) こんにちは、hokkyokunです。 VBAで背景色や文字色を指定する際に便利なツールを作ってみました。 VBAで色を指...

まとめ

まとめ
  • FindFormatとは
    セルを書式で絞り込むための設定
  • 書式で絞って検索するためには
    ①FindFormatで書式を設定
    ②Findメソッド(引数 SearchFormat:=True)
  • 背景色・文字の色、太字、結合セルなど
    様々な書式で絞り込むことができる。
  • 結合セルを見つけ出して処理…
    みたいな使い方もできる
  • FindFormatの書式は毎回クリアする
    でないとエラーの原因に
  • 色を調べるならRGBか
    カラーチャート

VBAの学習方法をまとめました。

VBA(マクロ)のおすすめの学習方法 こんにちはhokkyokunです。 VBAを学ぶことで確実に業務は効率化し、余裕をもって仕事をすることができるようになります。 ...

VBAを高コスパで、短期間で学ぶにはUdemyがおすすめです。
Udemyは良質の学習プラットフォームですが、
動画数が多すぎてどれを見ればよいか迷います。

おすすめの講師をまとめました。

【Udemyは講師で選べ!】UdemyがVBA学習に最適な理由とおすすめのVBA講師 こんにちはhokkyokunです。 巨大学習プラットホームUdemyの中からVBAに関する動画について講師に焦点を当ててまとめま...

Findメソッドの他の記事です。

ブログ村ランキング参加中です。よかったらフォローお願いします!!

PVアクセスランキング にほんブログ村