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では、どのようになるのかを調べるといいようですね。