データが含まれているかどうか判定する


一般的なテクニックだと思ってたら、意外と質問が多いので書きます。

セルA1のデータとセルB1のデータが等しいかどうかを判定するには、If Range("A1") = Range("B1")と「=」(等号)で比較できます。では、セルA1のデータがセルB1のデータ内に含まれているかどうかを判定するにはどうしたらいいでしょう。

VBAには、AがB内に存在するかどうか(含まれているかどうか)を判定する命令はありません。しかし、AがB内のどこに存在するかを数値で返す関数ならあります。InStr関数です。

long = InStr([start, ]string1, string2[, compare])

InStr関数は、string1の中で、string2が存在する位置を返します。

InStr("出身は横浜市です","横浜") の場合、「横浜」(strign2)は「出身は横浜市です」(string1)内の4~5文字目に存在します。したがって、InStr関数は4を返します。string2がstring1の中に存在しないとき、InStr関数は0を返します。つまり、InStr関数の返り値が0より大きかったら、string2はstring1の中に含まれている(存在している)とわかります。

次のコードは、セル範囲A1:C10内で「"田中"という文字列が含まれる」セルの背景を赤色にします。

Sub Sample()
    Dim c
    For Each c In Range("A1:C10")
        If InStr(c.Value, "田中") > 0 Then
            c.Interior.ColorIndex = 3
        End If
    Next c
End Sub