大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで複数条件と複数の文字列で検索して判定する方法についてご紹介します。複数条件で文字列を判定するには、InStrを組み合わせてVBAコードを組むことでできます。複数文字列の検索は、InStrとDo Whileを組み合わせるとできます。

はじめに

この記事では、InStrを使って複数条件や複数文字列を検索して判定する方法についてご紹介します。

複数の条件で文字列を検索して判定するには、InStrをいくつか組み合わせることでできます。

複数文字列を検索するには『Do While』と『InStr』を組み合わせることでできます。

複数条件や複数文字列を検索して判定したい場合は、InStrやDo Whileをうまく組み合わせてVBAコードを組んでいくことになります。

この記事で紹介すること

  • 複数条件で文字列を検索して判定する
  • 複数文字列を検索して判定する

目次

InStrで文字列を複数条件で検索して判定

文字列を複数条件で検索して判定するには、InStrをいくつか組み合わせるとできます。

『A』と『C』が文字列に含まれるかを判定

文字列『ABCDE』に『A』と『C』が含まれるかを判定するVBAコードを、InStrで記述してみます。

Sub TEST1()
    
    a = "ABCDE"
    
    '『A』を含むか
    If InStr(a, "A") > 0 Then
        '『C』を含むか
        If InStr(a, "C") > 0 Then
            MsgBox "AとCを含む"
        End If
    End If
    
End Sub

手順としては、

  • 文字列に『A』が含まれるかを判定(>0)
  • さらに文字列に『C』が含まれるかを判定(>0)

というような感じなります。

では、文字列『ABCDE』に『A』と『C』が含まれるか判定するVBAコードを実行してみます。

『A』と『C』が含まれているかを判定

InStrを使って任意の文字列に複数の文字列が含まれるかを判定した結果

結果は、『AとCを含む』という結果となります。

文字列『ABCDE』に『A』と『C』は含まれるので、複数条件の判定が正しくできています。

『A』は含まれて『C』は含まれないかを判定

文字列『ABCDE』に『A』は含まれて『C』は含まれないかを判定するVBAコードを、InStrで記述してみます。

Sub TEST2()
    
    a = "ABDE"
    
    '『A』を含むか
    If InStr(a, "A") > 0 Then
        '『C』を含まないか
        If InStr(a, "C") = 0 Then
            MsgBox "Aは含んでCは含まない"
        End If
    End If
    
End Sub

手順としては、

  • 文字列に『A』が含まれるかを判定(>0)
  • さらに文字列に『C』が含まれないかを判定(=0)

というような感じなります。

では、文字列『ABDE』に『A』は含まれて『C』は含まれないかを判定するVBAコードを実行してみます。

『A』は含まれていて、『C』が含まれていないかを判定

InStrを使って任意の文字列に複数の文字列が含まれるかを判定した結果

結果は、『Aは含んでCは含まない』という結果となります。

文字列『ABDE』に『A』は含まれて『C』は含まれないので、複数条件の判定が正しくできています。

InStrで同じ文字列を複数検索する

同じ文字列が複数含まれている場合、その文字数を検索する方法をInStrを使った場合でご紹介します。

『A』が何文字含まれるか

複数の同じ文字が含まれている文字列から、その数をカウントするには『Do While』を使うとできます。

文字列『ABCABCABC』から『A』の数をカウントするVBAコードです。

Sub TEST3()
    
    a = "ABCABCABC"
    
    c = 0
    b = InStr(1, a, "A") '『A』の位置を検索
    
    '『A』の検索結果が0になるまでループ
    Do While b > 0
        c = c + 1 '『A』の文字数をカウント
        b = InStr(b + 1, a, "A") '一つ右の文字列から『A』を検索
    Loop
    
    MsgBox c
    
End Sub

手順としては、

  • ①『A』を1文字目からInStrで検索する
  • ②最初に検索した位置の1つ右から『A』を検索する
  • ③ ②を『A』が検索されなくなるまでループ
  • ④ ③でループした回数が『A』の回数となる

というような流れです。

少しややこしいので、次のイメージを作ってみました。

手順①:『A』を1文字目からInStrで検索する

『A』を1文字目からInStrで検索する

最初に1文字目からInStrで『A』を検索します。

手順②:最初に検索した位置の1つ右から『A』を検索する

最初に検索した位置の1つ右から『A』を検索する

次に最初に検索した位置の1つ右から『A』を検索していきます。

手順③:②を『A』が検索されなくなるまでループ

②を『A』が検索されなくなるまでループ

手順②を『A』が検索されなくなるまでループします。

『A』が検索されなくなった場合ループを終了

『A』が検索されなくなったら終了です。

手順④:③でループした回数が『A』の回数となる

手順③でループした回数が『A』の回数となります。

結果は、『3』個となります。

では、VBAコードを実行してみます。

文字列の個数をカウントした結果

複数文字列をInStrを使って文字列の個数をカウントした結果

結果は、『3』文字となります。

文字列『ABCABCABC』に『A』は『3』個含まれているので、文字列の個数を正しくカウントできています。

『A』が3文字含まれているかを判定

文字列の個数をカウントして、文字列の個数で判定するVBAコードをご紹介します。

文字列『ABCABCABC』に『A』が『3』個含まれているかを判定するVBAコードです。

Sub TEST4()
    
    a = "ABCABCABC"
    
    c = 0
    b = InStr(a, "A") '『A』の位置を検索
    
    '『A』の検索結果が0になるまでループ
    Do While b > 0
        c = c + 1 '『A』の文字数をカウント
        b = InStr(b + 1, a, "A") '一つ右の文字列から『A』を検索
    Loop
    
    '『A』が3個含まれる場合
    If c = 3 Then
        MsgBox "Aを3文字含む"
    End If

End Sub

手順はこちらのようになります。

  • ①『A』を1文字目からInStrで検索する
  • ②最初に検索した位置の1つ右から『A』を検索する
  • ③ ②を『A』が検索されなくなるまでループ
  • ④ ③でループした回数が『3』かを判定する

では、VBAコードを実行してみます。

文字列の個数で判定した結果

InStrで文字列の個数で判定した結果

結果は、『Aを3文字含む』となりました。

InStrで文字列を複数条件・複数文字で検索して判定

これ以降はちょっとおまけで、複数条件と複数文字の判定を組み合わせたVBAコードをご紹介します。

基本は先ほどの2項目を組み合わせているだけなので、必要なさそうであればスキップしてください。

『A』が2個含まれていて『B』が含まれている

文字列『ABCABC』に『A』が2個含まれていて、『B』が含まれているか、を判定するVBAコードです。

Sub TEST5()
    
    a = "ABCABC"
    
    c = 0
    b = InStr(a, "A") '『A』の位置を検索
    
    '『A』の検索結果が0になるまでループ
    Do While b > 0
        c = c + 1 '『A』の文字数をカウント
        b = InStr(b + 1, a, "A") '一つ右の文字列から『A』を検索
    Loop
    
    '『A』を2個含んで、『B』を含む場合
    If c = 2 And InStr(a, "B") > 0 Then
        MsgBox "Aを2文字含む、Bも含む"
    End If
    
End Sub

手順は、

  • 『A』が2個含まれているかを判定
  • 『B』が含まれているかを判定

という流れになります。

結果を見てみます。

『A』を2個含み『B』も含むかの判定結果

InStrを使って複数文字列と複数条件を組み合わせた結果

結果は『Aを2文字含む、Bも含む』となりました。

複数条件と複数文字列を判定するVBAコードを組み合わせています。

『A』が2個含まれていて『B』が含まれていない

次は、文字列『ACAC』に『A』が2個含まれていて、『B』が含まれていないか、を判定するVBAコードです。

Sub TEST6()
    
    a = "ACAC"
    
    c = 0
    b = InStr(a, "A") '『A』の位置を検索
    
    '『A』の検索結果が0になるまでループ
    Do While b > 0
        c = c + 1 '『A』の文字数をカウント
        b = InStr(b + 1, a, "A") '一つ右の文字列から『A』を検索
    Loop
    
    '『A』を2個含んで、『B』を含まない場合
    If c = 2 And InStr(a, "B") = 0 Then
        MsgBox "Aを2文字含む、Bは含まない"
    End If
    
End Sub

手順は、

  • 『A』が2個含まれているかを判定
  • 『B』が含まれていないかを判定

という流れになります。

結果を見てみます。

『A』を2個含み『B』は含まないかの判定結果

InStrを使って複数文字列と複数条件を組み合わせた結果

結果は『Aを2文字含む、Bは含まない』となりました。

状況に応じてInStrでVBAコードを組むと、複数条件や複数文字列を検索して判定する、といったことができます。

おわりに

この記事では、InStrを使って複数条件や複数文字列を検索して判定する方法についてご紹介しました。

複数の条件で文字列を検索して判定するには、複数のInStrを組み合わせることでできます。

複数の文字列を検索するには『Do While』と『InStr』を組み合わせることでできます。

複数条件や複数文字列を検索して判定したい場合は、InStrやDo Whileをうまく組み合わせてVBAコードを組んでいきましょう。

ご参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す