VBA

Findメソッドの使い方(応用編2:大文字小文字、半角全角、コメントの検索)

このページでわかること

大文字小文字、半角全角を区別して検索できるようになります。
コメントの内容で検索できるようになります。

覚えること

  1. 大文字小文字の検索:
    引数MatchCaseをTrue→大文字小文字を区別する、False→区別しない
  2. 半角全角の検索:
    引数MatchByteをTrue→全角半角を区別する、False→全角半角を区別しない
  3. コメントの検索:
    引数LookInをxlComentsにする

大文字小文字の検索

表を下記のように作りました。
A2のappleではなく、
A7のAppleを検索したい場合を考えます。

Sub findmethodMatchCase()

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

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

'検索する値はApple(appleではない)、MatchCaseをTrueにする
Set fndRng = srcRng.Find(what:="Apple", lookat:=xlWhole, MatchCase:=True)

MsgBox ("大文字は:" & fndRng.Address)
End Sub
A2ではなく、A7が取れました

半角全角の検索

今度は以下のように表を作りました。
A2の「リンゴ」は全角、A7の「リンゴ」は半角です。

全角ではなく、半角のリンゴを検索したいという場合のマクロを考えます。

Sub findmethodMatchByte()

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

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

'検索する値は半角のリンゴ(全角のリンゴではない)、MatchByteをTrueにする
Set fndRng = srcRng.Find(what:="リンゴ", MatchByte:=True)

MsgBox ("半角のリンゴは:" & fndRng.Address)
End Sub

結果は半角の方のリンゴのセル位置を取得できました。

コメントの検索

次はコメントを検索する方法です。
以下のようにコメントが入っている表を作りました。

A2のコメントではなく、A7のコメントを検索したいと思います。

Sub findmethodComments()

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

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

'コメント「コメントだよ」を検索、LookInをxlCommentsに
Set fndRng = srcRng.Find(what:="コメントだよ", LookIn:=xlComments)

MsgBox ("「コメントだよ」のコメントを入れたセルは:" & fndRng.Address)
End Sub

注意する点

Findメソッドの引数のうち、
LookIn、LookAt、SearchOrder、MatchByteは設定が保存されるので、
次に使う場合は注意してください。

以下のコードを最後に入れておくと、
設定を初期化できます。
もし不具合あるようでしたら試してみてください。

Set fndRng = Range("A1").Find(what:="リンゴ", LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns, MatchByte:=False)

ちょっとマニアックな内容でしたが、
もしかしたら日々の業務で知っていると
業務が短縮できるアイデアにつながるかもしれないです。

例えば半角全角が混じっちゃったデータベースで置換はしたくないけど位置は記録とりたいとか
コメントに入力者の名前を入れるルールにしておいて、誰それさんはどこのセルに入力したとか

アイデア次第で役に立つケースもあると思います。

大事なのは知っておくことだと思います。

ではでは