文字を検索する方法、または何文字目に含まれているか確認する関数として
「InStr関数」があります。
こちらは、対象のセル・変数などから文字を読み取り
対象の文字・数値を検索する関数となっています。
【マクロVBA】対象のセル・変数に指定した文字・数値が含まれているかInStrで確認する ► 独学エクセル塾 (dokugakuexcel.com)
しかし、こちらの関数は、頭文字からの検索であり
場合によっては、右側・後側から検索したい場面がありますよね。
そんな時に使用できるのが「InStrRev関数」となっています。
InStrRev関数を使用すれば、簡単に右側から文字を検索できるので、ぜひ参考にしてみてください。
それでは見ていきましょう。
⬛︎こんな事ができるようになる!
・指定した文字が、右側から何文字目に含まれているか確認できるようになる
⬛︎忙しい人向けのコピペ用ソースコード
Sub 対象の文字が右側から何文字目か調査() Dim N As Long N = InStrRev(対象のセル・変数, "検索したい文字・数値") MsgBox "対象の文字は右側から検索すると" & N & "文字目にあります。" End Sub
対象のセル・変数と検索したい文字・数値をカスタムして使用してください。
⬛︎構文の説明
まず、使用する関数についてですが「InStrRev関数」になります。
関数仕様としては下記の通りです。
InStrRev(検索対象,検索文字・数値,[検索開始位置],[検索の種類])
「[ ]」は省略可能となっています。
[検索開始位置]では検索を開始する位置を指定することが出来ます。
たとえば「3」を指定すると先頭から3文字目を対象として
3文字目から前に検索します。
[検索の種類]ではバイナリモードかテキストモードを
選択することができます。
バイナリモードの場合はvbBinaryCompare
テキストモードの場合はvbTextCompareを入力します。
ただし、省略した場合はバイナリモードになるので
バイナリモードの場合は未入力でかまいません。
各モードの検索方法は下記の通りです。
モード | 入力文字 | 機能 |
---|---|---|
バイナリ | vbBinaryCompare | 全角・半角の区別、大文字・小文字の区別をする |
テキスト | vbTextCompare | 全角・半角の区別、大文字・小文字の区別をしない |
⬛︎右側・後ろから指定した文字が何文字目にあるか検索する
・セルから文字を検索する
では、実際にセルから文字を読み取って右側から対象の文字を検索したいと思います。
下の図をご覧ください。
セル番地「B3」に文字が入力されてあります。
今回は、その文字から「C」を検索して
右側から何文字目にあるか表示したいと思います。
では、構文に当てはめていきましょう。
InStrRev(検索対象,検索文字・数値,[検索開始位置],[検索の種類])
検索対象はセルの文字列を参照するので「B3」です。
検索する文字は「“C”」なので、そのまま入力します。
ここで「”」で囲わないと変数扱いになるので注意が必要です。
当てはめるとこのようになります。
InStrRev(Range(“B3”), “C”)
では見本のソースコードをご覧ください。
Sub 対象の文字が右側から何文字目か調査() Dim N As Long N = InStrRev(Range("B3"), "C") MsgBox "対象の文字は右側から検索すると" & N & "文字目にあります。" End Sub
最後に検索した結果をメッセージボックスで表示させます。
では実行してみましょう。
結果はこのようになります。
「対象の文字は右側から検索すると6文字目にあります」と言うメッセージが表示されました。
「C」は右側から検索すると6文字目にあたるので
うまく機能していますね。
参考までに、通常のInStr関数で表示した結果を見てみましょう。
Sub 対象の文字が左側から何文字目か調査() Dim N As Long N = InStr(Range("B3"), "C") MsgBox "対象の文字は左側から検索すると" & N & "文字目にあります。" End Sub
結果はこのようになります。
先ほどとは異なり、左から検索するので「2文字目」という結果となりました。
・変数から検索する
先ほどはセルから文字を読み取り、検索を行いましたが、変数から読み取ることも可能です。
では、例を紹介したいと思います。
見本のソースコードをご覧ください。
Sub 対象の文字が右側から何文字目か調査() Dim N As Long, Word Word = "あいうえおあいうえお" N = InStrRev(Word, "う") MsgBox "対象の文字は右側から検索すると" & N & "文字目にあります。" End Sub
内容として、変数「Word」に「あいうえおあいうえお」と言う文字列を格納しています。
こちらをInStrRev関数を使用することで右側から文字を検索しています。
今回は、見本で「う」を検索しましょう。
実行した結果はこちらです。
「あいうえおあいうえお」を右から「う」を検索すると
8文字目にあるので、狙い通り機能していることがわかります。
さらに、比較用としてInStr関数でも表示してみたいと思います。
Sub 対象の文字が左側から何文字目か調査() Dim N As Long, Word Word = "あいうえおあいうえお" N = InStr(Word, "う") MsgBox "対象の文字は左側から検索すると" & N & "文字目にあります。" End Sub
結果はこのようになりました。
文字列「あいうえおあいうえお」に含まれる「う」は左から見ると
「8」文字目に含まれていますが、右から見ると「3」文字目に含まれていることから、「3」を出力しています。
⬛︎応用編
・右端から何文字目に対象の文字があるか検索する
では応用編です、先ほどは右側から検索し、左側から何文字目に対象の文字があるか検索していましたが
Len関数を使用することにより、右側から何文字目にあるか求めることができます。
ではメカニズムについて紹介したいと思います。
下記のソースコードをご覧ください。
Sub 対象の文字が右側から何文字目か調査() Dim N As Long, Wordcount Wordcount = Len(Range("B3")) '文字の数を算出 N = Wordcount - InStrRev(Range("B3"), "F") + 1 '右から何文字目か計算 MsgBox "対象の文字は右側から検索すると" & N & "文字目にあります。" End Sub
まずLen関数でセル番地B3の文字数を算出します。
その後にInStrRev関数を使用することで、右側から対象の文字を検索しています。
そこからLen関数で求めた文字数からInStrRev関数で
求めた文字の位置を引くことによって右端から何文字目にあるか求めることができます。
ポイントとして結果に「+1」することで正確な計算結果となります。
では、見本を見ていきます。
セル番地B3には、「BCDEFCD」と言う文字列が含まれています。
こちらを「F」で検索して、右端から何文字目にあるか求めたいと思います。
それでは実行しましょう。
結果はこのようになります。
「F」は、右端から「3」文字目にあたるので
うまく機能していますね。
⬛︎よくあるエラーと対処法
・文字が大文字・小文字で異なる
検索の対象または対象となる文字が
大文字と小文字で異なる場合はうまく検索できません。
先ほどの見本で小文字の「d」を検索してみましょう。
Sub 対象の文字が右側から数えて何文字目か調査() Dim N As Long N = InStrRev(Range("B3"), "d") MsgBox "対象の文字は右側から検索すると" & N & "文字目にあります。" End Sub
結果はこのようになります。
検索文字が小文字のために「D」を検出できていません。
では、再度構文を見てみましょう。
InStrRev(検索対象,検索文字・数値,[検索開始位置],[検索の種類])
冒頭で検索の種類は「バイナリモード」と「テキストモード」があると説明しました。
モード | 入力文字 | 機能 |
---|---|---|
バイナリ | vbBinaryCompare | 全角・半角の区別、大文字・小文字の区別をする |
テキスト | vbTextCompare | 全角・半角の区別、大文字・小文字の区別をしない |
省略していた場合は「バイナリモード」となり、大文字・小文字を区別します。
つまり、大文字と小文字を区別しないテキストモードに変更すればいいのです。
なので検索の方法に「vbTextCompare」を追加すれば大文字と小文字を区別しなくなります。
N = InStrRev(Range("B3"), "d", , vbTextCompare)
実行した結果はこちらです。
小文字の「d」で検索したにもかかわらず大文字の「D」をカウントしてくれました。
・文字が全角・半角で異なる
こちらも先程のエラーと同様です。
検索方法をテキストモードに変えることにより、全角半角
どちらでも検索できるようになります。
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
⬛︎まとめ
いかがだったでしょうか?
InStrRev関数を活用することで、右から文字を検索することができます。
さらにLen関数と合わせることによって、右端から何文字目に対象の文字があるか検索することも可能です。
ぜひ活用してみてください。
それでは次回の記事でお会いしましょう。