5/19/2024

Excel。VBA。指定の文字列が含まれているかを、手早く確認したい。【InStr】

Excel。VBA。指定の文字列が含まれているかを、手早く確認したい。

<Excel VBA:InStr関数>

セル内に、該当する文字列がセル内に含まれているならば、「○」というような判定を手早く行いたいわけです。

InStr関数

そこで、今回は、Excel VBAでプログラムをつくって対応していきます。


次のようなプログラム文をつくってみました。

Sub 八王子市()

    Dim i As Long

    Dim lastrow As Long

    

    lastrow = Cells(Rows.Count, "a").End(xlUp).Row


    For i = 1 To lastrow

        If InStr(Cells(i, "a"), "八王子市") <> 0 Then

            Cells(i, "b") = "○"

        End If

    Next

End Sub


では、実行します。


このように、A列の住所に八王子市が含まれているデータに「○」が表示されていることが確認できます。


大量なデータなどで、オートフィルターで抽出して…という処理でもいいかもしれませんが、定期的に大量なデータを使う場合などには、Excel VBAのプログラムを用意しておくといいかもしれません。


では、プログラム文を確認します。


変数の宣言文です。

Dim i As Long

Dim lastrow As Long

lastrow = Cells(Rows.Count, "a").End(xlUp).Row


lastrowは、A列のデータの一番下の行番号を代入させます。

そして、このあとの、繰り返し文で、繰り返す上限として使っています。


For i = 1 To lastrow

    If InStr(Cells(i, "a"), "八王子市") <> 0 Then

        Cells(i, "b") = "○"

    End If

Next


For To Nextで処理を繰り返しています。

そして、

If InStr(Cells(i, "a"), "八王子市") <> 0 Then ~ End If


If文ですね。InStr関数は、セル内に指定した文字列があるか、どうかを検索する関数です。

そして、含まれていなければ、「0(ゼロ)」を算出します。

逆に含まれているならば、最初に見つけた文字位置を算出します。


要するに、0かどうかで、判断することができるというわけです。


InStr(Cells(i, "a"), "八王子市") <> 0

とすれば、A2に八王子市という文字が含まれているか、どうかが判断できます。


「<>0」は「0ではない」という意味です。

「0ではない」ので、文字が含まれていたら、


Cells(i, "b") = "○"


B列に「○」を表示しましょう。

というわけです。


なお、InStr関数は、通常のExcelにはありません。