1番最後に見つかった位置を返す
                                                        玄関へお回り下さい。
一番最後に見つかった位置を返すInstrRev似関数 ゆう(U)さん投稿分   (007)
         
Option Explicit

'=======================================================
'一番最後に見つかった位置を返すInstrRev似関数 fInstrRev1
'=======================================================
'result=fInstrRev1(String1,String2,[lngLimit],[Compare])
'引数  String1 :検索対象となる文字列(""不可)
'    String2 :検索する文字列(""不可)
'    lngLimit:検索対象とする文字数(省略:全文字)
'    Compare :比較モード(省略可)
' 戻値 result :>0 位置 / 0 なし / -1 エラー
'-------------------------------------------------------
'VB6.0のInstrRev関数と違ってNullなどは考慮していません
'-------------------------------------------------------
Private Function fInstrRev1(ByRef String1 As String, _
      ByRef String2 As String, _
      Optional ByVal lngLimit As _
      Long = -1&, _
      Optional ByVal compare As _
      VbCompareMethod = vbBinaryCompare _
      ) As Long
  Dim i As Long, j As Long
  Dim lngEndPos As Long
  Dim lngLength As Long

  lngLength = Len(String2)
  If lngLength = 0& Then GoTo Err_Exit
  If Len(String1) = 0& Then GoTo Err_Exit

  If lngLimit < 0& Then
    lngEndPos = Len(String1) - lngLength + 1&
  Else
    lngEndPos = lngLimit - lngLength + 1&
  End If

  i = InStr(j + 1&, String1, String2, compare)
  Do While i > 0&
    If i > lngEndPos Then Exit Do
    j = i
    i = InStr(j + 1&, String1, String2, compare)
  Loop
  fInstrRev1 = j

  Exit Function

Err_Exit:

  fInstrRev1 = -1&

End Function

'============================================================

使用方法

Private Sub
Command1_Click()
  Dim lngRet As Long
  lngRet = fInstrRev1(Text1.Text, Text2.Text)
  Text3.Text = lngRet
  If lngRet > 0 Then
    Text1.SetFocus
    Text1.SelStart = lngRet - 1
    Text1.SelLength = Len(Text2.Text)
  End If
End Sub




2002/04/17