"検索"といえば、一般的には"セルの検索"を指します。セルの検索は、RangeオブジェクトのFindメソッドです。Findメソッドは、検索文字列が見つからないとき、実行時エラーになるのではなく、Nothingという値を返しますので、このエラーは発生しません。ちなみに、セルを検索するときは、検索結果がNothingかどうか(検索文字列が見つかったかどうか)を判定するのがセオリーです。
Sub Sample1() Dim FoundCell As Range Set FoundCell = Cells.Find(What:="tanaka") If FoundCell Is Nothing Then MsgBox "見つかりません" Else FoundCell.Activate End If End Sub
ところが、セルの検索をマクロ記録すると、見つかった検索文字列(が入力されているセル)が、ただちに選択されるので、次のようなコードが記録されます。
Sub Macro2() ''引数は省略しました Cells.Find(What:="tanaka").Activate End Sub
マクロ記録で記録されたコードをそのまま使うと、検索文字列が見つからないときエラーになります。
これは、検索に失敗したとき、「Cells.Find(What:="tanaka")」の結果がNothingを返すので「Nothing.Activate」を実行しようとしたために発生するエラーです。Nothingはセル(Rangeオブジェクト)ではありませんので、Activateメソッドを持っていません。
「検索文字列が見つかりませんでした」のエラーではありませんが、セルを検索するマクロで間違いやすいポイントですので、注意が必要です。