Excel。事務職のExcel VBA その26。特定の文字が含まれているかチェックする方法
<Excel VBA>
一般事務職の方でも、少し知っているだけでも、効率的に作業効率をあげることができるようになる、Excel VBAを使って、
今回は、セル内に該当の文字が含まれているかどうかを
判定する方法をご紹介していきましょう。
次の表があります。
B列の市区町村にあるデータの中から、
「横浜市西区」のデータがあるのかないのかをチェックして、
C列に該当データがある場合には、”○”を表示することをしたいのですが、
通常のExcelだと、
=IF(COUNTIF(B4,"横浜市西区"&"*"),"○","")
という、IF+COUNTIF関数のネスト技を使う必要があります。
この数式の作り方を知っていればいいのですが、
データをインポートするたびに、この数式を作るというのは、
なかなか面倒ですし、
実際、このIF+COUNTIF関数のネスト技を覚えている・
気づく人は少ないかと思われます。
では、Excel VBAで、
「横浜市西区」という文字の有無がわかるExcel VBAの構文を
確認してみましょう。
Sub 文字を含む()
Dim i As Long
Dim r As Long
r = Cells(Rows.Count, "a").End(xlUp).Row
For i = 1 To r
If InStr(Cells(i, 2), "横浜市西区") <> 0 Then
Cells(i, 3) = "○"
End If
Next
End Sub
今回のケースは、セルのデータと等しいということではなくて、
その一部の有無なので、=(イコール)で判定する方法は使えません。
また、Excel VBAには、
【含まれているかどうか】を判断できる記号(演算子)は
残念ながらありません。
そこで、InStr関数を使ってみると、対応できます。
InStr(インストリング)関数は、文字列の中から指定した文字列を検索し、
最初に見つかった文字の位置を算出する関数です。
まずは、実行してみましょう。
「横浜市西区」という文字があることを判断することが出来ましたね。
では、構文を確認してみましょう。
Dim i As Long
Dim r As Long
お馴染みの変数の宣言文ですね。
r = Cells(Rows.Count, "a").End(xlUp).Row
これもお馴染みのデータの最終行番号を算出する方法ですね。
For i = 1 To r
If InStr(Cells(i, 2), "横浜市西区") <> 0 Then
Cells(i, 3) = "○"
End If
Next
For文で1~最終行まで繰り返し実行させます。
If InStr(Cells(i, 2), "横浜市西区") <> 0 Then
ここが、今回の心臓部ですね。
cells(i,2)は、B1のセルを指します。B1は見出しかもしれませんが、
今回の文字とは合致することはないので、1行目から実行させました。
そのB1に、”横浜市西区”という文字が、InStr。
つまりその文字があれば、その開始位置の数値を算出しますし、
なければ、0(ゼロ)を算出します。
最終的に、この一文は、
InStrを使って算出した結果が「<>0」。ゼロでなかったら
ということですね。
もしも、ゼロでなければ、
Cells(i, 3) = "○"
C列に○を表示してください。
という処理をしているわけですね。
これで、結果を求めることが出来ましたね。
InStr関数って便利だなぁ~と思っても、
通常のExcel関数にはありませんのでご注意ください。