検索結果のセル(Range)を返す関数

タイトルのマクロは、以下です。

'************************
'* 検索結果のセル(Range)を返す関数
'* str:検索文字
'* rng:検索範囲のセル
'* myLookAt:デフォルトで「部分一致」、xlWholeを指定すると「完全一致」
'* myMatch:デフォルトで「大文字小文字、半角全角を区別しない」、trueをしてすると「区別する」
Function FuncFind(ByVal str As String, ByVal rng As Range, _
        Optional ByVal myLookAt As Long = xlPart, _
        Optional ByVal myMatch As Boolean = False) As Range
    Set FuncFind = rng.Find(What:=str, _
        LookIn:=xlValues, _
        LookAt:=myLookAt, _
        MatchCase:=myMatch, _
        MatchByte:=myMatch)
    ' rng:検索範囲
    ' What:検索文字
    ' LookIn:検索対象、値(xlValues)
    ' LookAt:完全一致(xlWhole)、部分一致(xlPart)
    ' MatchCase:大文字と小文字を区別(True)、区別しない(False)
    ' MatchByte:半角文字と全角文字を区別(True)、区別しない(False)
End Function

使用例は、以下です。

Sub 使用例()
    Dim rng As Range
    Dim rngFind As Range
    
    ' 検索範囲は、このブックのアクティブシート全体
    Set rng = ThisWorkbook.ActiveSheet.Cells
    
    
    ' 部分一致、区別しない、で検索
    Set rngFind = FuncFind("A文字", rng)
    
    ' 見つからなかったときは、メッセージを表示させる
    If rngFind Is Nothing Then
        MsgBox "見つかりません"
    Else
        ' 見つかったセルを選択
        rngFind.Select
        Stop    ' 一時停止
    End If
    
    
    ' 完全一致、区別する、で検索し、選択
    FuncFind("B文字", rng, xlWhole, True).Select
    ' 検索結果がなければ、エラー発生します。
End Sub

このマクロを実行すると、このブックのアクティブシートのシート全体を検索します。

最初は、「部分一致」「大文字小文字、半角全角を区別しない」条件で文字列「A文字」を検索して、あればそのセルを選択し、なければ、「見つかりません」と表示されます。

マクロを再スタートさせると、「完全一致」「大文字小文字、半角全角を区別する」条件で文字列「B文字」を検索して、あればそのセルを選択し、なければ、エラーとなります。

Follow me!