
Excel VBA を書きました。
セルの値に特定の文字列が含まれている場合に、特定の処理をします。
サンプルコードを残します。

Excel VBA
文字列検索
(サンプルコードあり)
小規模なコードを書いた中での処理です。
簡単な内容ですが、備忘録ということで。
何も特別なことはないと覆います。
文字列を見つける関数を使う(inStr)
文字列検索の方法はいくつかありますが。
今回は InStr
を使いました。
文字列を検索できる関数です。
仲間がいます。以前 InStrRev
を使ってコードを書いていました。
InStr
は、検索文字列を左から1文字ずつ検査して、探したい文字が見つかれば、その位置を数字で返してくれます。探したい文字が見つからない場合には0が返されます。
InStr(開始位置, 検査したい文字列, 探したい文字)
開始位置は、だいたい「1」ですよね。
検査したい文字列と探したい文字は、セルのValueでも大丈夫です。ただ、分かりにくくなるので、変数に格納して使った方がよいと思います。
第4引数に「文字列比較の種類」を指定することができます。なんだかよく分からないうえに、省略可能でデフォルト値を使って問題ないので、省略です。
InStrRev
では、右から検査します。
文字列があれば処理して最後にメッセージ

セルから取得した文字列の中に特定の文字があるときに処理する想定です。
特定の文字は、ここでは「特」としておきます。
- セル値を直接参照して操作してもよいのですが、処理数が多いようなら、配列や変数に入れましょう。セル範囲を配列に格納できます。
- 処理回数は変数に格納します。
ということで、上記2つの変数が必要です。
もし Option Explicit
の指定を入れている売位には、宣言をお忘れなく。
あるいは、使えそうなものをピックアップしておいてください。
分岐する条件
「InStr」を使うことは分かりました。
戻り値が0より大きければ、対象の文字列が存在すると判断します。
条件の書き方としては以下です。
If InStr(1, 対象文字列, "特") Then
' 処理
End If
処理回数をカウント
上記の条件分岐後に、処理回数をカウントしていくかたちです。
いわゆるインクリメント処理です。
VBAの場合は便利な書き方はないので、基礎的な書きかたで対応します。
メッセージはどうしますか?
メッセージを表示するには、メッセージボックスを使うなり、セルに直接書き込むなり、いくつかの方法があります。
個人的には、メッセージボックスの頻発は好きではないので、セルに書き込むかたちを好みます。
とはいっても、プログラムの特性次第で方法は選びましょう。
処理回数が0より大きければ、メッセージ処理を実行するかたちにします。
If文で分岐処理しましょう。
せっかく件数を取っているので、メッセージに件数も含めてあげると丁寧でしょう。
サンプルコード
以下のようなコードを書きました。
デフォルメしています。
- 条件分岐では複数の文字列を確認する必要があったので、複数条件になっています。
- メッセージはセルに書き込む方式です。
' 変数宣言
Dim Gyou As Long ' 処理対象の行数
Dim Moji As String ' 検査対象文字列
Dim Kazu As Long ' 処理回数のカウント
' 行のループ
For Gyou = 1 To 100 Step 1
' ・・・ 略 ・・・
' 検査対象格納
Moji = Cells(Gyou, 1).Value
' 条件分岐
If InStr(1, Moji, "特") > 0 _
Or InStr(1, Moji, "徳") > 0 _
Or Instr(1, Moji, "得") > 0 Then
' 処理数カウント
Kazu = Kazu + 1
' ・・・ 略 ・・・
End If
' ・・・ 略 ・・・
End For
' ・・・ 略 ・・・
' メッセージ(E1に書き込み)
If Kazu > 0 Thne
Cells(5, 1).Value = "確認事項あり"
End If
コピペして、適当に修正して活用していただいて問題ないです。
ご意見やご感想などお聞かせください! コメント機能です。