sano@projecta.co.jp
のような電子メールアドレスの中から、ユーザー名だけを取得するケースを考えてみます。まずはリスト4とリスト5を参照してください。
リスト4:InStr関数を使った場合 |
|
リスト5:InStrRev関数を使った場合 |
|
「@」を検索文字列とすると、InStr関数、InStrRev関数ともに、「5」を返します。あとは、Left関数を組み合わせれば、左端のユーザー名が取得できます(図7)。
図7:ダイアログボックスにユーザー名の“sano”が表示された |
![]() |
しかし、文字列の中に検索したい文字が複数含まれている場合(例えばフルパス名からファイル名を取得する場合など)、InStr関数とInStrRev関数の違いがわかります。
それでは、
C:¥My Documents¥Sample.txt
の中からInStr関数とInStrRev関数、それぞれを使ってファイル名を取得しているリストをご覧ください(リスト6・7)。
リスト6:InStr関数を使った場合 |
|
リスト7:InStrRev関数を使った場合 |
|
どちらのコードを実行しても同じ結果が得られますが、InStr関数の場合には、指定した文字を先頭から検索するので、ファイル名を取得するにはリスト6ののように、「検索文字“¥”が見つからなくなるまで」という繰り返しの処理になります。もちろん、その分コードの処理速度も低下します。
しかし、InStrRev関数ならば、最後の“¥”の先頭からの位置「16」を返すので、16に1を加算してMid関数で切り出せば、処理を繰り返すことなくファイル名を取得できるのです。
InStrRev関数の構文は以下のとおりです。
InStrRev(文字列,検索文字列[,検索開始位置[,比較モード]])
次に、応用編として、引数の検索開始位置を指定して“C:¥My Documents¥Sample.txt”の最初の“¥”の位置を取得してみましょう。リスト7のi = InStrRev(myData, "¥")
をi = InStrRev(myData, "¥",15)
とします。この場合、15文字目から先頭に向かって検索が行なわれますので、「i」には文字位置「3」が返されます。InStr([開始位置,]文字列,検索文字列[,比較モード])
であり、InStrRev関数とは引数の指定順序が違うので注意してください。