SSブログ

[Excel VBA] 文字列検索し、その結果をAddressかValueで返す。オフセット付き [Excel VBA]

文字列を検索し、見つかったRangeを戻す関数。
オフセットを入れられるようにして、見つかった文字から RowでLoopさせたりするときを目的とした関数。
アドレスが欲しい場合、Rangeで戻しているので、
 fnFind("検索文字").address
が使える。

Function fnFind(KeyWord As String _
        , Optional ofstR As Long = 0, Optional ofstC As Long = 0) As Range
    ' 2020/10/24 Sanono
    ' 文字列を検索し、見つかったセルを Rangeで返す。
    ' アドレスが必要な場合 .adderss をつける。指定がない場合Valueが戻る
    ' Row,Columnのオフセットを指定できるようにして、
    ' 検索文字からのRow,ColumnでLoop用いることを想定
    
    ' Keyword       : 検索文字
    ' area          : 検索範囲
    ' ofstR         : Row    方向のオフセット
    ' ofstC         : Column 方向のオフセット
    
    Dim rng As Range
    Dim ret As Integer
    Set rng = Cells.Find(What:=KeyWord, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _
        , MatchByte:=False, SearchFormat:=False)

    If rng Is Nothing Then
        ret = MsgBox("検索文字[" & KeyWord & "]が見つかりません、終了します。" & vbCrLf _
            & " キャンセルでデバックモード", vbOKCancel)
        If ret = vbOK Then
            End
        End If
        Stop
        Set fnFind = rng
    Else
        Set fnFind = rng.Offset(ofstR, ofstC)
    End If

End Function

Sub test_fnFind()
    Dim tmp As String
    tmp = fnFind("A2")
    Debug.Print tmp
    Debug.Print fnFind("A2").Address
    Debug.Print fnFind("X2")
End Sub

タグ:Excel,VBA
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。