VBA関数InStrRev関数

VBA関数 60回
InStrRev関数とは
特定の文字を対象となる文字列から探すときに、前からではなく後ろから探した方が都合がいいときがあります。
そのような場合に使う関数がInStrRev関数です。
戻り値として返される数値は前からの順番となります。
見つからない場合は0を返します。前から1文字目で見つかった場合は1を返します。
InStrRev関数構文
InStrRev(stringcheck,stringmatch[,start[,compare]])
四つある引数のうち、3番目の引数startと最後の4番目の引数compareは省略が可能です。
引数
stringcheckで、対象となる文字列を指定します。
引数
stringmatchで、検索する文字列を指定します。
引数startで、開始位置を表す数を指定します。
引数startは前からの文字数です。
引数compareで、大文字と小文字を区別するか指定できます。
引数compareには次の定数を指定できます。
vbTextCompare,0:テキストモードで比較します。大文字と小文字の区別をしません。
vbBinaryCompare (既定),1:バイナリモードで比較をします。

InStrRev関数の使用例
InStrRev関数で後から探す
1. このサンプルではハイフン"-"が文字列の中に二つあります。
そのハイフンを後ろから探して、最初に見つけたハイフンの位置が、前から何番目にあるのかという、その番号を取得します。
Sub bfunc_60() Range("D2").Value = InStrRev(Range("B2").Value, "-") Range("D3").Value = InStrRev(Range("B3").Value, "-") Range("D4").Value = InStrRev(Range("B4").Value, "-") Range("D5").Value = InStrRev(Range("B5").Value, "-") End Sub

2. マクロを実行した結果は以下のようになりました。

2番目の"-"より後の文字列を取り出す
3. では、後の文字列を取り出すコードを考えましょう。
上記で取得した位置にプラス1した所から取り出せば良いのでMid関数をつかいます。
Mid(対象文字列, InStrRev(対象文字列, "-") + 1)
Range("E2").Value = Mid(Range("B2").Value, InStrRev(Range("B2").Value, "-") + 1)

4. コードは以下のようになります。2行から5行まで繰り返すのでFor~Nextステートメントを使います。
Sub bfunc_60b() Dim i As Long For i = 2 To 5 Cells(i, 5).Value = Mid(Cells(i, 2).Value, InStrRev(Cells(i, 2).Value, "-") + 1) Next i End Sub