を設定する方法.png?fit=500%2C152&ssl=1)
VBAでIf~Thenステートメントを設定される際、複数の条件式を組み合わせたい場合があるかと思います。
VBAでは「~かつ」の複数条件を設定する際にはAnd演算子が必要になります。
今回はIf~ThenステートメントとAnd演算子で複数条件(~かつ)を設定する方法を解説していきます。
If~ThenステートメントとAnd演算子を組み合わせた際の基本構文
1 2 3 4 5 |
If 条件式1 And 条件式2 Then 処理1 Else 条件式2 Then 処理2 End If |
もちろん「ElseIf」などでさらに条件分岐を設定することも可能です。(今回はオーソドックスな例を紹介)
条件式1
1つ目の判断基準となる条件を指定します。
たとえば、”A4セルは○ですか?”というようなYES/NOでできる質問のことです。
条件式2
条件式1と組みあせたい2つ目の判断基準となる条件を指定します。
And演算子やOr演算子と組み合わせることで条件式は2つ以上設定することが可能です。
処理1
上記複数の条件式の結果が真(TRUE)の場合に行う処理を指定します。
処理2
上記複数の条件式の結果が偽(FALSE)の場合に行う処理を指定します。
使用例
学科および実技でそれぞれ70点以上で合格となるテストがあったとします。
B2セルが学科の点数、C2セルが実技の点数、D2セルが合否欄で、B2セル・C2セルがそれぞれ70以上の場合はD2セルの値が”○”、それ以外の場合はD2セルの値が”×”なるように設定します。
1 2 3 4 5 6 7 |
Sub 複数条件_AND() If Range("B2").Value >= 70 And Range("C2").Value >= 70 Then Range("D2").Value = "○" Else Range("D2").Value = "×" End If End Sub |
2行目の「If」と「Then」の間が条件式となります。
そして、条件式を複数つなげるため、条件1の後に「And」(間に半角スペース)をつけて条件2を記述します。
今回の条件1は「B2セルが70以上」なので「Range("B2").Value >= 70」となり、条件2は「C2セルが70以上」なので「Range("C2").Value >= 70」となります。
続いて3行目が条件1を満たした場合の処理1を記述します。(条件1の真の場合)
処理は「D2セルの値を"○"にする」なので「Range("D2").Value = "○"」となります。
4行目に「Else」、5行目で条件を満たさない場合の処理(処理2)を記述します。(偽の場合)
処理2は「D2セルの値を”×”にする」なので「Range(“D2″).Value = “×”」となります。
6行目に「End If」で締めて終了になります。
マクロ動作イメージ
D2セルが最初はブランクになっています。
マクロを起動すると、B2・C2セルがそれぞれ70以上の値が入っていればD2セルに”○”の値が返ります。
そして、B2・C2セルのいずれかが70未満の値であればD2セルに”×”の値が返ります。
Excel内の類似機能
If~ThenステートメントとAnd演算子の組み合わせにもっとも類似したExcelの機能といえば、フォーマット関数でのIF関数とAND関数の組み合わせです。(考え方はいっしょです)
VBAのコードとフォーマット関数では記述の仕方が少しばかり異なるので、フォーマット関数で設定したい場合は下記記事をご参照ください。
IF関数とAND関数で複数条件(~かつ)を設定する方法 | Excelを制する者は人生を制す ~No Excel No Life~
If~ThenステートメントはIF関数とくらべて、範囲選択やコピー・消去などのメソッドも設定できるため、より複雑な設定が可能ですよ!
まとめ
And演算子は活用する機会が多いので、ぜひともIf~Thenステートメントとセットで覚えると良いですね!
And演算子の考え方自体は下記記事をご参照ください。
【Excel VBA】比較演算子と論理演算式まとめ | Excelを制する者は人生を制す ~No Excel No Life~
ベン図だとかなり理解しやすいですよ!
初めまして。
ガントチャートを、関数や条件付き書式を使って作成することは
出来たのですがマクロで作成するにはどうしたらいいのでしょうか?
ガントチャート作成のマクロ版をお願いします。
オブジェクト版とセルに色を塗る版が知りたいです。
(業務で両方出てくるって言うのもありますが今あるフォーマットを
少し改良するだけで作成できればいいなと思ってます。
じゅんこさん
コメントありがとうございます!
ガントチャートのマクロ版ですね!
ちょっと今繁忙なので、落ち着いたら記事にしてみたいと思います。
今後ともよろしくお願いしますm(_ _)m