Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » Excel VBAのIf文で、X以上かつY以下/未満というAND条件を指定する

Excel VBAのIf文で、X以上かつY以下/未満というAND条件を指定する

対象:Excel2007, Excel2010, Excel2013

「エクセル マクロ if 以上 以下」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)で、X以上かつY以下といった条件を指定する、If文の書き方を探している方による検索でしょうか。

マクロ初心者の方がやってしまいがちな間違ったAND条件

例えば、何らかのテスト結果の判定を行うマクロで、A1セルの値が70以上かつ85以下のときにB1セルに「B」と入力するようなマクロを作ろうとしたときに、初心者の方が書きがちなのが、
 If Range("A1").Value >= 70 And <= 85 Then
というコードでしょうか。(私自身もマクロを書き始めたばかりの頃、こんな書き方をしようとした記憶があります)

あるいは、
 If 70 <= Range("A1").Value <= 85 Then
というコードを書いてしまう方もいらっしゃるようです。

どちらのコードもVBAのわかる人が読めば、A1セルの値が70以上かつ85以下という条件を指定したかったのだろうな、という想像をすることができます。

ですが、いずれもVBA的にはダメです。

[スポンサードリンク]

X以上かつY以下という判定をするサンプルマクロ

A1セルの値が70以上かつ85以下だったときにB1セルに「B」と入力するマクロは以下のような書き方をします。

Sub AND演算子のサンプル1()

 If Range("A1").Value >=70 And Range("A1").Value <= 85 Then
  Range("B1").Value = "B"
 End If

End Sub

「Range("A1").Value >=70」という条件と
「Range("A1").Value <= 85」という条件の間に
And演算子を書いて、
 If Range("A1").Value >=70 And Range("A1").Value <= 85 Then
とします。

ワークシート関数のIF関数で、A1セルの値が70以上かつ85以下だったときにB1セルに「B」と入力する数式は、
 =IF(AND(A1>=70, A1<=85), "B", "")
と書きます。AND条件を指定するAND関数の引数
「A1>=70」という条件と
「A1<=85」という条件を両方キッチリ指定します。

VBAのIf文でも同じような考え方をしてください。

X以上かつY未満の場合

A1セルの値が70以上かつ85未満という条件なら、
 If Range("A1").Value >=70 And Range("A1").Value < 85 Then
です。

比較演算子の「<=」を「<」にすればOKです。

VBAの条件文は比較演算子の前後を入れ替えられる

And演算子を使った条件文は上記のマクロのような書き方をする方が多いようですが、以下のような書き方もできて、私はこちらのほうをおすすめします。

Sub AND演算子のサンプル2()

 If 70 <= Range("A1").Value And Range("A1").Value <= 85 Then
  Range("B1").Value = "B"
 End If

End Sub

先のマクロで、
 If Range("A1").Value >=70 And Range("A1").Value <= 85 Then
となっていた条件文の比較演算子「>=」の向きと前後を替えて、
 If 70 <= Range("A1").Value And Range("A1").Value <= 85 Then
のように書くこともできるのです。

このように書くメリットは、
 小さい数字(70)
 調べる対象(Range("A1").Value)
 大きい数字(85)
が、順番どおり左から並んでいることです。

ワークシート関数のIF関数を使った数式、
 =IF(AND(A1>=70, A1<=85), "B", "")
に慣れている方の場合は、はじめのうちは先にご紹介した、
 If Range("A1").Value >=70 And Range("A1").Value <= 85 Then
のほうが、おそらく書きやすいのではないかと思います。

ですが、読んだときの理解しやすさ(脳の負荷の上がりにくさ)は、
 If 70 <= Range("A1").Value And Range("A1").Value <= 85 Then
のほうが上のはずです。

A1セルの値が70以上かつ85以下だったとき、という単純な条件だけのケースならば、
 If Range("A1").Value >=70 And Range("A1").Value <= 85 Then
 If 70 <= Range("A1").Value And Range("A1").Value <= 85 Then
のどちらでも、理解しやすさはそれほど変わらないと感じるかもしれません。

ですが、もう少し条件が複雑になった場合、例えば、
 If tmp < 50 Then
 ElseIf tmp >= 50 And tmp < 70 Then
 ElseIf tmp >= 70 And tmp < 85 Then
 ElseIf tmp >= 85 Then
 Else
 End If
というコードと、
 If tmp < 50 Then
 ElseIf 50 <= tmp And tmp < 70 Then
 ElseIf 70 <= tmp And tmp < 85 Then
 ElseIf 85 <= tmp Then
 Else
 End If
というコードを比べたときは、どちらが読むときに脳の負荷を上げずに済むかは、言うまでもないことでしょう。

Excelマクロをある程度書けるレベルになったときに、何となくカッコよく見えそうだから、というまったく理由になっていない理由で、理解し辛いコードを書く方が時々いらっしゃいますが、まずは、他の人が読んだときに理解しやすい・読む人の脳の負荷を上げずに済むコードを書くことを心掛けるべきだと、私は考えています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » Excel VBAのIf文で、X以上かつY以下/未満というAND条件を指定する

「条件分岐」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.