3/08/2020

Excel VBA。VBAでOr条件はどう作るの?【Excel VBA】

Excel VBA。VBAでOr条件はどう作るの?

<Excel VBA:Or条件>

Excelでは、様々な条件分岐を行って資料を作ります。
例えば、次の表。

A列の店舗名が、新宿または、横浜だったらC列に「関東」と入力したい場合、ExcelではOR関数を使うわけですね。

C2に数式を設定する場合は、
=IF(OR(A2="新宿",A2="横浜"),"関東","")
という数式を設定するわけですね。

オートフィルで数式をコピーすれば、新宿または横浜ならば関東と表示されていることが確認できます。

データを読み込んできたあとに、これと同じように算出したい場合は、Excel VBAをつかうことで、データを読み込みから連動で処理すること可能になりますので、作業効率は改善できる感じがします。

そこで、Excel VBAでは、どのように作ったらいいのでしょうか?
OR関数と同じようにプログラム文を作ってみましょう。

Sub or_part1()
    Dim i As Integer
   For i = 2 To 11
        If Cells(i, "a").Value = "新宿" Or "横浜" Then
            Cells(i, "c").Value = "関東"
        End If
   Next
End Sub

実行してみると、Excelの数式のようにはいきません。エラーが発生します。

急に「型」っていわれても、文字は「”(ダブルコーテーション)」で囲っているし?
実は、Or以降の書き方が間違っているというか、不足しているのです。

次のようにプログラム文を書きなおしてみましょう。
Sub or_part1()
    Dim i As Integer
   For i = 2 To 11
        If Cells(i, "a").Value = "新宿" Or Cells(i, "a").Value = "横浜" Then            Cells(i, "c").Value = "関東"
        End If
   Next
End Sub

では実行してみましょう。

このようにExcel VBAのプログラム文でIF文での条件分岐でOrを使う場合には、面倒ですが、再度、Cells(i, "a").Value = "横浜"と「どこの何が」をExcel VBAに指示してあげないといけません。

しかし、Cells(i, "a").Value = "横浜"と入力する必要があるとしたら、Orの条件がもっと増えた場合プログラム文が、どんどん長くなってしまいますよね。

例えば、A5の梅田を大宮に変更して、新宿または横浜または大宮だったら「関東」としたい場合のプログラム文は、

If Cells(i, "a").Value = "新宿" Or Cells(i, "a").Value = "横浜" Or Cells(i, "a").Value = "大宮" Then

と煩雑になりますし、プログラム文をつくるもの大変です。

そこで、If文を使うよりもSelect Case文を使ったプログラム文ならば、短くなりますし、その分、わかりやすくなります。

では、Select Case文で作ってみましょう。
Sub or_part2()
    Dim i As Integer
    For i = 2 To 11
        Select Case Cells(i, "a").Value
            Case "新宿", "横浜", "大宮"
                Cells(i, "c").Value = "関東"
            Case Else
                Cells(i, "c").Value = ""
        End Select
    Next
End Sub

では実行してみましょう。

A5を大宮に変更して実行しましたので、先程空欄だったC5にも関東という結果が表示されています。

今回のように、Excel と Excel VBAは似ているようで似ていないというものが、ちょこちょこありますので、Excelと同じようにして、上手くいかない場合は、Excel VBAでは、どのようになるのかを調べるといいようですね。