トップページ >
Excel >
VBA >
データベース的活用法 >
検索の基本はFindメソッド
検索の基本はFindメソッド
まずは[検索]テクニックです。下のようなデータを対象とします。
[商品コード]列から「A007」を検索してみましょう。
Sub Sample01()
Dim FoundCell As Variant
With Worksheets("Sheet1")
Set FoundCell = .Range("A2:A11").Find("A007")
If FoundCell Is Nothing Then
MsgBox "A007は見つかりません。", vbExclamation
Else
MsgBox "A007は、" & FoundCell.Address & "です。" & vbCrLf & _
"A007は、" & FoundCell.Row & "行目です。", vbInformation
End If
End With
End Sub
Excelをデータベース的に使うとき、何はなくとも検索は必須テクニックです。任意のセル範囲内にお目当てのデータが入力されているかどうかは、Findメソッドで知ることができます。FindメソッドはExcelの検索機能を実行する命令です。[編集] - [検索] で表示される [検索]ダイアログボックスで指定できるオプションはすべて指定できます。詳しくはヘルプでFindメソッドを調べてください。
Findメソッドで注意しなければならないのは、
検索の結果を調べるということです。検索に成功したときFindメソッドが返すのは
Rangeオブジェクト(セルそのもの)です。見つかったセルのアドレスでも、見つかったセル内のデータでもありません。上記の
Set FoundCell = .Range("A2:A11").Find("A007")
で、変数FoundCellには見つかったセルA8 そのもの (Range("A8")) が入ります。ですからアドレスや行番号を取得するときはFoundCell.AddressやFoundCell.Rowのように Rangeオブジェクトのプロパティを指定するわけです。
ところが、問題は検索に失敗したとき、つまり
指定されたデータが見つからなかったときです。このとき Findメソッドは
Nothingという特別な値を返します。Nothingはセル(Rangeオブジェクト)ではありません。Nothingが格納されている変数FoundCellに対して、FoundCell.AddressやFoundCell.Rowとプロパティを参照するとエラーになります。
したがって、Findメソッドを使ったら、返り値がNothingかどうかを調べなければなりません。変数がNothingかどうかを判定するときは、
If FoundCell = Nothing Then ''間違い
と
= を使うのではなく
If FoundCell Is Nothing Then ''正しい
のように
Is キーワードを使う点にも注意してください。
[目次]戻る← | →進む[データをカウントする]