検索文字列が見つかりませんでした。(エラー番号:744)


"検索"といえば、一般的には"セルの検索"を指します。セルの検索は、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メソッドを持っていません。

「検索文字列が見つかりませんでした」のエラーではありませんが、セルを検索するマクロで間違いやすいポイントですので、注意が必要です。