VB6末尾からいくつかの文字を検索する

スポンサーリンク

VB6 では、該当する関数が存在しないため、以下のような関数を自作します。

先頭からいくつかの文字を検索する場合は、先頭からいくつかの文字を検索する をご覧ください。

サンプルコード

以下にサンプルコードを示します。

VB6.0 以前
' -------------------------------------------------------------------------------
'       末尾から先頭に向かって指定したいずれかの文字を検索する。
'
' @Param    stTarget    検索対象となる文字列。
' @Param    stFindChars 検索対象となる文字をすべて格納した文字列。
' @Param    [iStart]    検索を開始する位置。
' @Param    [iCount]    検索する文字数。
' @Return               最初に見つかった文字列の位置。
' -------------------------------------------------------------------------------
Public Function InStrRevAny(ByVal stTarget As String, ByVal stFindChars As String, Optional ByVal iStart As Integer, Optional ByVal iCount As Integer) As Integer
    If iStart <= 0 Then
        iStart = Len(stTarget)
    End If

    If iCount <= 0 Then
        iCount = Len(stTarget) - 1
    End If

    Dim iReturn As Integer
    Dim i       As Integer

    For i = iStart To iStart - iCount Step -1
        If InStr(1, stFindChars, Mid$(stTarget, i, 1)) > 0 Then
            iReturn = i
            Exit For
        End If
    Next i

    InStrRevAny = iReturn
End Function

使用例は以下のようになります。

VB6.0 以前
    ' 処理対象となる文字列変数を宣言する
    Dim stTarget As String
    stTarget = "EDCBABCDE"

    ' 末尾から 'B', 'C', 'D' のいずれかを検索し、見つかった位置を取得する
    Dim iFind1 As Integer
    iFind1 = InStrRevAny(stTarget, "BCD")

    ' 5 文字目から 'B', 'C', 'D' のいずれかを検索し、見つかった位置を取得する
    Dim iFind2 As Integer
    iFind2 = InStrRevAny(stTarget, "BCD", 5)

    ' 5 文字目から 2 文字まで 'B', 'C', 'D' のいずれかを検索し、見つかった位置を取得する
    Dim iFind3 As Integer
    iFind3 = InStrRevAny(stTarget, "BCD", 5, 2)

    ' すべての結果を表示する
    Call MsgBox( _
        "iFind1 = " & CStr(iFind1) & vbNewLine & _
        "iFind2 = " & CStr(iFind2) & vbNewLine & _
        "iFind3 = " & CStr(iFind3) _
    )

関連するリファレンス

準備中です。

スポンサーリンク