【マクロVBA】対象のセル・変数に指定した文字・数値が含まれているかInStrで確認する

検索・置換

マクロVBAには、FindやLikeなど様々な検索方法がありますが、
今回は、対象のセル・変数に指定した文字が含まれているか確認する
方法
について紹介したいと思います。

さらに、応用すれば何文字目に含まれているかも確認できるようになるので
とても便利な方法です。

ぜひ参考にしてみてください。
それでは見ていきましょう。

⬛︎こんなことができるようになる

・指定した文字が、何文字目に含まれているか確認できるようになる
・対象のセル・変数の文字・数値を読み取り指定した文字が含まれているか確認できるようになる。

⬛︎忙しい人向けのコピペ用ソースコード

Sub InStr見本コード()
Dim TargetName As String
Dim SearchWord As String

TargetName = Range("B3") '対象セルor変数の指定
SearchWord='検索したい文字を入力
'文字列中に「SearchWord」が含まれているかどうかを判定
If InStr(1, TargetName, SearchWord, vbTextCompare) > 0 Then
'対象文字が含まれていた時の処理
Else
'対象文字が含まれていない時の処理
End If
End Sub

黄色の蛍光ペンの個所を打ち換えて使用してください。




■構文の説明

まず、使用する関数についてですが「InStr関数」になります。
関数仕様としては下記の通りです。

InStr([検索開始位置],検索対象,検索文字・数値,[検索の種類])

[ ]」は省略可能となっています。

[検索の種類]ではバイナリモードかテキストモードを
選択することができます。

バイナリモードの場合はvbBinaryCompare
テキストモードの場合はvbTextCompareを入力します。

ただし、省略した場合はバイナリモードになるので
バイナリモードの場合は未入力でかまいません。

各モードの検索方法は下記の通りです。

モード入力文字機能
バイナリvbBinaryCompare全角・半角の区別、大文字・小文字の区別をする
テキストvbTextCompare全角・半角の区別、大文字・小文字の区別をしない

⬛︎指定した文字が含まれているか確認する

・対象の文字が何文字目にあるか割り出す

では、実際にInStr関数を使用してみたいと思います。

まずはセル番地B3」の文字列から「D」の文字が含まれているか確認したいと思います。

見本のソースコードは下記の通りです。

Sub 何文字目にあるか調査()
Dim answer As Long
'文字列中に「D」が何文字目に含まれているかどうかを判定
answer = InStr(1, Range("B3"), "D")
MsgBox "Dは" & answer & "文字目にあります。"
End Sub

では構文と比較しましょう。

InStr([検索開始位置],検索対象,検索文字・数値,[検索の種類])

今回は検索開始位置を入力していますが、省略しても構いません。
例では「1」と入力しているので1文字目から検索します。

検索対象はセル番地「B3」なので「 Range(“B3”)」としています。
「Cells(3,2)」でも構いません。

検索文字・数値は「D」なので、ダブルクォーテーション「”」で囲って入力します。
ここで「”」で囲わないと変数扱いになるので注意が必要です。

結果としてInStr関数に当てはめるとこのようになります。
answer =InStr(1, Range(“B3”), “D“)

今回は結果を「answer」という変数に格納してメッセージボックスにて
何文字目に「D」があるか表示したいと思います。

それではこちらを実行してみましょう。
結果はこのようになります。

「Dは4文字目にあります。」と表示されました。

Aから数えて4番目に位置しているのでうまく機能していますね。

・対象の文字が含まれているか確認する

InStr関数ですが、検索した結果、対象の文字がなければ
変数の値は「0」になります。

この機能を応用することで
対象の文字が含まれているかわかるようになります。

では、対象の文字が含まれているか、判別するソースコードを紹介します。

Sub 対象の文字が含まれているか調査()
'文字列中に「D」が何文字目に含まれているかどうかを判定
If InStr(1, Range("B3"), "D") > 0 Then
MsgBox "対象の文字は含まれています"
Else
MsgBox "対象の文字は含まれていません"
End If
End Sub

では説明です。
先程のInStr関数にIF関数を合わせることで
対象の文字が含まれているか判別できるようになります。

メカニズムとして
文字があった場合、何文字目か数値を算出するので結果は「0」以上になります。
そこでIF関数で結果が「0」を超えていた場合は「対象の文字は含まれています」というメッセージを表示させます。
対して検索結果が無い場合は「0」が算出されるため「対象の文字は含まれていません」と言うメッセージを表示させます

それでは、こちらのソースコードを走らせてみましょう。

セル番地B3には「ABCDE」入力しています。
「D」で検索した結果はこちらです。

「ABCDE」の中に「D」は含まれているので「対象の文字は含まれています」という結果になりました。

今度はB3に「FGHIJ」と入力しました。
実行した結果はこちらです。

「FGHIJ」に「D」はないですから、「対処も文字は含まれていません」という結果になりました。

狙い通り動作していますね。
この方法で、対処のセル・変数に対象の文字が含まれているか確認することができます。

・変数から検索する

先ほどはセルから文字を読み取り、
検索を行いましたが、変数から読み取ることも可能です。

では、例を紹介したいと思います。

見本のソースコードをご覧ください。

Sub 対象の文字が含まれているか調査()
Dim Word As String
Word = "あいうえお"
If InStr(1, Word, "") > 0 Then
MsgBox "対象の文字は含まれています"
Else
MsgBox "対象の文字は含まれていません"
End If
End Sub

内容として、変数「Word」に「あいうえお」と言う文字列を格納しています。
こちらをInStr関数を使用することで
対象の文字が含まれているか確認します。

今回は、見本で「」を検索しましょう。

実行した結果はこちらです。

あいうえお」の中に「」は含まれているので「対象の文字は含まれています」という結果になりました。

 

今度は「」を検索してみたいと思います。

If InStr(1, Word, "") > 0 Then


結果はこのようになります。

変数でも文字を検索することが出来ていますね。

⬛︎よくあるエラーと対処法

・文字が大文字・小文字で異なる

検索の対象または検索する文字が
大文字と小文字で異なっている場合はうまく検索できません。

先ほどの見本で小文字の「」を検索してみましょう。

Sub 対象の文字が何個含まれているか調査()
Dim Counter, N
Counter = 0
N = 1
Do
N = InStr(N + Counter, Range("B3"), "d")
If N = 0 Then
Exit Do
Else
Counter = Counter + 1
End If
Loop
MsgBox "対象の文字は" & Counter & "個あります。"
End Sub

結果はこのようになります。

検索文字が小文字のために「D」を検出できていません

では、再度構文を見てみましょう。
InStr([検索開始位置],検索対象,検索文字・数値,[検索の種類])

冒頭で検索の種類は「バイナリモード」と「テキストモード」があると説明しました。

モード入力文字機能
バイナリvbBinaryCompare全角・半角の区別、大文字・小文字の区別をする
テキストvbTextCompare全角・半角の区別、大文字・小文字の区別をしない


省略していた場合は「バイナリモード」となり、大文字・小文字を区別します。

つまり、大文字と小文字を区別しないテキストモードに変更すればいいのです。

なので検索の方法に「vbTextCompare」を追加すれば大文字と小文字を区別しなくなります。

N = InStr(N + Counter, Range("B3"), "d", vbTextCompare)

実行した結果はこちらです。

小文字で検索しましたが、大文字の「D」が検索出来ていますね。

・文字が全角・半角で異なる

こちらも先程のエラーと同様です。
検索方法をテキストモードに変えることにより、全角半角
どちらでも検索できるようになります。

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

InStr関数(Visual Basic for Applications) | Microsoft Learn

⬛︎まとめ

いかがだったでしょうか?
InStr関数を使えば対象の文字・数値が含まれているか確認することができます,
さらに、何文字目に含まれているかも確認することは可能なので、機能を応用することが可能です。

ぜひ活用してみてください。

応用編としてInStr関数を使用して、対象の文字が何文字あるか
算出する方法も、別の記事でまとめていますので、ご参照下さい。

記事についてはこちらから☟

【マクロVBA】対象の文字が何個・何文字あるかInStr関数で求める!変数・セルに対応 ► 独学エクセル塾 (dokugakuexcel.com)

それでは次回の記事でお会いしましょう。

コメント