第20回.条件分岐(IF)
ある条件の時だけ処理したい、ある条件の時は処理したくない、そのような条件によって処理内容を変更したい場合があります。
VBAで条件により処理を分岐させたい場合に使うのが、Ifステートメントです。
プログラムにおいて、最も重要なステートメントのひとつがIfステートメントと言えます。
Ifステートメントの構文
真の処理 ・・・ 条件式を満たした場合の処理
[Else
偽の処理] ・・・ 条件式を満たさない場合の処理
End If
偽とは、条件式を満たさない場合
条件を満たしている(合致している)場合は真の処理、それ以外の(条件式を満たさない)場合は偽の処理を実行します。
IFステートメントの条件式
真(True)か偽(False)を評価する数式または文字列式で指定します。
文字列式とは、文字列と比較演算子・論理演算子の組み合わせです。
比較演算子
比較演算子 | 意味 |
= | 等しい |
<> | 等しくない |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
論理演算子
論理演算子 | 意味 | 条件例 | 結果 |
And | 論理積 | True And True | TRUE |
True And False | FALSE | ||
False And True | FALSE | ||
False And False | FALSE | ||
Or | 論理和 | True Or True | TRUE |
True Or False | TRUE | ||
False Or True | TRUE | ||
False Or False | FALSE | ||
Xor | 排他論理和 | True Xor True | FALSE |
True Xor False | TRUE | ||
False Xor True | TRUE | ||
False Xor False | FALSE | ||
Not | 論理否定 | Not True | FALSE |
Not False | TRUE | ||
Eqv | 論理等価 | ||
Imp | 論理包含 |
And、Or、Not以外の論理演算子は当分は使用する必要はないでしょう。
特にマクロVBAを他人と共有する場合は、自分が分かるからといってむやみに難しいものを使うことは避けるべきです。
Is演算子
If オブジェクト1 Is オブジェクト2 Then
オブジェクト1とオブジェクト2の両方が同じオブジェクトを参照する場合はTrueになります。
※Is演算子については、第52回.オブジェクト変数とSetステートメントで説明します。
オブジェクト変数については、今後の学習で少しずつ覚えていけば良いです。
演算子の優先順位
算術演算子 > 比較演算子 > 論理演算子
つまり、最初に算術演算子、次に比較演算子、最後に論理演算子が評価されます。
各演算子グループの中では、より上が優先順位が高くなります。
↑ 高 低 ↓ |
算術演算子 | → | 比較演算子 | → | 論理演算子 |
^(指数) | すべて同じ 優先順位 = <> < > <= >= Like Is |
Not | |||
-(符号反転 ) | And | ||||
* / | Or | ||||
\(割り算の商) | Xor | ||||
Mod(割り算の余り) | Eqv | ||||
+ - | Imp | ||||
&(文字列連結) |
同一優先順位の場合は、式の左から右へ順に評価されます。
Ifステートメントの使用例文
IFステートメントの例文1
If Cells(1, 1) >= 100 Then Cells(1, 2) = "○"
IFステートメントの例文2
If Cells(1, 1) >= 100 Then
Cells(1, 2) = "○"
End
If
例文1と同じです。
特段の事情(1行で書く事でプログラムの可読性を高めたい等の場合)が無い限り、こちらを使いましよう。
IFステートメントの例文3
If Cells(1, 1) >= 100 Then
Cells(1, 2) = "○"
Else
Cells(1, 2)
= "×"
End If
A1セルが100以上の場合、B1セルに"○"
A1セルが100未満の場合、B1セルに"×"
IFステートメントの例文4
If Cells(1, 1) >= 100 Then Cells(1, 2) = "○" Else Cells(1, 2) = "×"
これは、例文3と同じですが、この使い方は余程の事情がない限り使わない方がよいです、
プログラムが見づらくなり、また、ブレークポイントの設定が出来ない等によりデバッグがしづらくなります。
Ifステートメントのネスト(入れ子)
If Cells(1, 1) >= 100 Then
If Cells(1, 1) >= 200
Then
Cells(1, 2) = "A" '>= 200
Else
Cells(1, 2) = "B" '>=100 AND < 200
End If
Else
If Cells(1, 1) >= 50
Then
Cells(1, 2) = "C" '< 100 AND >= 50
Else
Cells(1, 2) = "D" '< 50
End If
End
If
A1セルが
>= 200の場合、B1セルに"A"
>=100 AND < 200の場合、B1セルに"B"
< 100 AND >= 50の場合、B1セルに"C"
< 50の場合、B1セルに"D"
ほとんどの場合、より単純な条件式に集約する事が可能です。
サイト内のIfステートメント参考ページ
最後に
IFの文法を理解しても、なかなかサクッとは書けないものです。
その後も、マクロVBAを書いていく上では常にIfの書き方は意識しながら書いてみてください。
同じテーマ「マクロVBA入門」の記事
第21回.条件分岐(ElseIf)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。