ExcelVBAのFindメソッドの留意点
ExcelVBAのシートオブジェクトには、任意のセルに格納されている値(検索文字列)を検索できるFindメソッドがあります。
以下のサンプルのようにRangeプロパティで検索するセルの範囲を指定して、Findメソッドで『検索文字列を指定』し検索して、マッチすればそのセルオブジェクト(一つのみ)を返し、マッチしなければ Nothing を返します。
・サンプル
Dim objCell As Variant Dim objCell_first As Variant Set objCell = Range("A5:A20").Find(What:="Chaichan") If objCell Is Nothing Then MsgBox "ノーマッチ!!" Else objCell_first = objCell.Address Do MsgBox objCell.Row & "行目にマッチ!" Set objCell = Range("A5:A20").FindNext(objCell) Loop While Not objCell Is Nothing And objCell.Address <> objCell_first End If Set objCell = Nothing Set objCell_first = Nothing
で、留意点なのですが、検索するセルがセル結合していて、かつその結合範囲の一部が検索範囲をはみ出していると、マッチしないのです。
というか、セル結合は何かと引っ掛かります。
いつも、セル結合には泣かされますね。
なので、セル結合には気をつけろ!
という、留意点でした・・・。
尚、複数マッチしたいケースでは、FindNextメソッドを使用します。
FindNextメソッドは、検索範囲内をループ的(下まで行ったらまた上から)に検索します。
・追記:Findメソッドの引数
引数 | 定数 | 内容 | 省略 | デフォルト |
What | 検索対象のデータをバリアント型 (Variant) 型で指定します。 | 不可 | ||
After | ここで指定したセルの次のセルから検索が開始されます。 | 可 | ||
LookIn | 数式または表示された値を検索するかどうかを指定します。 | 可 | ||
xlFormulas | 数式を検索対象に指定します。 | |||
xlValues | 値を検索対象に指定します。 | |||
LookAt | 検索方法 | 可 | ||
xlPart | 一部が一致するセルを検索します。 | ○ | ||
xlWhole | 全てが一致するセルを検索します。 | |||
SearchOrder | 検索を行う順番 | 可 | ||
xlByRows | 列方向に検索します。 | ○ | ||
xlByColumns | 行方向に検索します。 | |||
SearchDirection | 検索を行う方向 | 可 | ||
xlNext | 順方向に検索します。 | ○ | ||
xlPrevious | 逆方向に検索します。 | |||
MatchCase | 大文字と小文字の区別 | 可 | ||
True | 大文字と小文字を区別します。 | |||
False | 大文字と小文字を区別しません。 | ○ | ||
MatchByte | 半角と全角の区別 | 可 | ||
True | 半角と全角を区別します。 | |||
False | 半角と全角を区別しません。 | ○ |