
通常Excelで条件に応じて処理を規定したい場合、IF関数などを使用します。
VBAにおいてはその役目をIf~Thenステートメントが担うことになります。
条件分岐はVBAでも汎用性が高いため、特に意識的に覚えていきましょう。
今回はIf~Thenステートメントについて解説していきます。
If~Thenステートメントの基本構文
1 2 3 | If 条件式 Then 処理 End If |
または、下記のように一行で表すことも可能です。
1 | If 条件式 処理 |
条件式
判断基準となる条件を指定します。
たとえば、”A4セルは○ですか?”というようなYES/NOでできる質問のことです。
処理
論理式の結果が真(TRUE)の場合に行う処理を指定します。
上記で例えた”A4セルは○ですか?”という質問にYESの場合に設定しておく処理のことです。
使用例
40点以上が合格のテストがあったとします。
B2セルが点数、C2セルが合否欄で、B2セルが40以上の場合はC2セルの値が”○”になるように設定します。
1 2 3 4 5 | Sub 条件分岐() If Range("B2").Value >= 40 Then Range("C2").Value = "○" End If End Sub |
2行目の「If」と「Then」の間が条件式となります。
今回の条件は「B2セルが40以上」なので「Range(“B2”).Value >= 40」となります。
続いて3行目が条件を満たした場合の処理を記述します。(要は真の場合)
処理は「C2セルの値を”○”にする」なので「Range(“C2”).Value = “○”」となります。
4行目に「End If」で締めて終了になります。
マクロの動作イメージ
C2セルが最初はブランクになっています。
マクロを起動すると、B2セルが40以上の値が入っていればC2セルに”○”の値が返ります。
もちろん、B2セルが40未満ならブランクのままになります。
上記コードでは一旦C2セルに”○”が返った後にB2セルを40未満に書き直した上でマクロを再起動しても”○”のままでブランクに書き変わったりはしません。
よって、都度C2セルの値を変動させたい場合はコードの条件をもう少し詳しく記述しなければなりません。
Excel内の類似機能
If~ThenステートメントExcelの代表的な以下の2機能です。
- IF関数
- 条件付き書式
関連記事は下記をご参照ください。
IF関数 | Excelを制する者は人生を制す ~No Excel No Life~
条件付き書式 | Excelを制する者は人生を制す ~No Excel No Life~
なお、If~Thenステートメントは上記のような値や書式などのプロパティに限らず、範囲選択やコピー・消去などのメソッドも設定できるため、より複雑な条件分岐を設定することが可能です。
まとめ
If~Thenステートメントは「マクロの記録」では設定できず、VBE経由でしか設定できません。
若干記述の仕方や活用範囲は異なりますが、考え方はまさにフォーマット関数のIF関数と同じなので、IF関数がもともと使える方であれば難なく習得できるでしょう。
条件分岐は至るところで活躍しますので、いろいろと試しながら身につけてくださいね!