4/07/2020

Excel VBA。文字列の一部の文字が合致しているかどうかを判断するには?【Mate】

Excel VBA。文字列の一部の文字が合致しているかどうかを判断するには?

<Excel VBA>

横浜市が担当になったので、住所の一部に横浜市とあれば、担当に○を表示させたいわけです。

次の表のようにしたいわけです。

やりたいことは簡単ですが、大量のデータだとしたら、非常に面倒なわけですね。

このようなケースは、Excel VBAをつかって、処理をさせるほうが、高速でかつ楽だと思います。

プログラム文をつくってみましょう。
Sub 文字列一部検索()
    Dim i As Integer
     For i = 2 To 8
        If Cells(i, "b") = "横浜市" Then
            Cells(i, "a") = "○"
        End If
    Next
End Sub

実行してみると、横浜市のデータには、○は表示されません。
理由はいたって簡単ですね。

If Cells(i, "b") = "横浜市" Then

このIf文の条件が合致しないからです。

この文の意味は、「B列のセルの値が横浜市ならば」ということですね。
ただ、このプログラム文が問題というよりも、B列のデータが問題なのです。

つまり、住所が都道府県から市区町村まで含まれてしまっているのが問題なわけです。

本来ならば、都道府県の列と市区町村の列をわけて管理していれば、
このプログラム文で何ら問題は無いのですが、一つのセルの中に、抽出したい条件が含まれてしまっています。

今回は、神奈川県の横浜市なので、左から4文字目から3文字が横浜市なのかという条件にしてもいいかもしれませんが、あまり汎用的ではありませんし、この条件を作るには少々面倒です。

文字列の一部を検索したい場合は、ワイルドカードの『*(アスタリスク)』を横浜市の前後に挟めばいいわけなのですが、そう簡単にはいきません。

それでは、次のように修正します。
Sub 文字列一部検索()
    Dim i As Integer
     For i = 2 To 8
        If Cells(i, "b").Value Like "*横浜市*" Then
            Cells(i, "a") = "○"
        End If
    Next
End Sub

まず、実行してみましょう。

目的通り、横浜市という文字がある場合、担当に「○」が表示されています。

If文を次のように修正しました。
If Cells(i, "b").Value Like "*横浜市*" Then

Like "*横浜市*"とすることで、セル内の文字列の一部に横浜市という文字があるかどうかという条件をつくることができました。

Like "*横浜市*"の形は、Accessのクエリでワイルドカードを使用した時の条件と同じ方法ですね。

今回のように、セル内の一部の文字と合致するものを見つける場合には、Likeとワイルドカードを組み合わせて使う必要がありますので、覚えておくと、意外と便利です。

ただ、できれば、住所という列ではなくて、都道府県と市区町村にわけて管理すれば、もっと簡単に処理することができますので、まずはExcelの基本的な考えに沿って作ることを考えると、さらにいいかもしれませんね。