VBA入門
条件分岐(IF)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2022-06-11

第20回.条件分岐(IF)


マクロ VBA Ifステートメント

ある条件の時だけ処理したい、ある条件の時は処理したくない、そのような条件によって処理内容を変更したい場合があります。
VBAで条件により処理を分岐させたい場合に使うのが、Ifステートメントです。


マクロVBAで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事です。
プログラムにおいて、最も重要なステートメントのひとつがIfステートメントと言えます。


Ifステートメントの構文

If 条件式 Then 真の処理 [Else 偽の処理]

または

If 条件式 Then
  真の処理 ・・・ 条件式を満たした場合の処理
[Else
  偽の処理] ・・・ 条件式を満たさない場合の処理
End If

[ ]は省略可能です。

真とは、条件式を満たす場合、
偽とは、条件式を満たさない場合

条件式に書かれている条件を判定し、
条件を満たしている(合致している)場合は真の処理、それ以外の(条件式を満たさない)場合は偽の処理を実行します。

真の処理、偽の処理には、複数の処理(ステートメント等)を記述することができます。


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演算子

2つのオブジェクト参照変数を比較するために使用されます。
If オブジェクト1 Is オブジェクト2 Then
オブジェクト1とオブジェクト2の両方が同じオブジェクトを参照する場合はTrueになります。
※Is演算子については、第52回.オブジェクト変数とSetステートメントで説明します。
・オブジェクト変数 ・個有のオブジェクト型とは ・Setステートメント ・Setステートメントの使用例 ・WithとSetの使い分け方 ・Setステートメントの実践的な使い方 ・Is演算子によるオブジェクトの比較 ・最後に

オブジェクト変数については、今後の学習で少しずつ覚えていけば良いです。

演算子の優先順位

VBAの演算子まとめ(演算子の優先順位)
・演算子の優先順位 ・算術演算子 ・比較演算子 ・論理演算子 ・連結演算子 ・単項演算子

算術演算子 > 比較演算子 > 論理演算子
つまり、最初に算術演算子、次に比較演算子、最後に論理演算子が評価されます。
各演算子グループの中では、より上が優先順位が高くなります。











↓ 
算術演算子 比較演算子 論理演算子
^(指数) すべて同じ
優先順位
=
<>
<
>
<=
>=
Like
Is
Not
-(符号反転 ) And
* / Or
\(割り算の商) Xor
Mod(割り算の余り) Eqv
+ - Imp
&(文字列連結)

同一優先順位の場合は、式の左から右へ順に評価されます。

Ifステートメントの使用例文

IFステートメントの例文1

If Cells(1, 1) >= 100 Then Cells(1, 2) = "○"

※.Valueは省略しています。

A1セルが100以上の場合、B1セルに"○"

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ステートメントをネスト(入れ子、Ifの中に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"

ネストのレベルに特に制限はありませんが、概ね3段階までにしましょう。

それ以上になる場合は、条件式を工夫してみましょう。
ほとんどの場合、より単純な条件式に集約する事が可能です。


サイト内のIfステートメント参考ページ

素直なプログラミング
プログラムを作る場合、「可読性」「保守性」等々に気を配る必要がありますが、まずは、素直なコードを書くことでしょう。テクニックに走ったりせず、頭に浮かんだ事をそのままコーディングしていく事も重要です。頭に浮かんだ事が、今の自分のスキルレベルなのですが、スキルが上がれば、頭に浮かぶ事も、少しずつ変化してきます。
IF文の整理と論理的思考
論理的思考でIf文を整理することについて、簡単な例で解説していきます。無駄な条件が入っていたり、条件が重複しているプログラム程理解しずらい物はありません。問題です。以下のマクロについて、気が付いたことを指摘して下さい。
条件式のいろいろな書き方
If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…
実は奥が深いIfステートメント
プログラムと言うものは、条件により処理を分ける。これにつきます。つまり、この条件が一番問題となります。そして、その記述をするものが、Ifステートメントになります。IFステートメントの基本 まずはIFステートメントの基本を確認しましょう。
ForとIfのネストこそがVBAの要点
・第1に考える事・・・大外の繰り返しを作成 ・第2に考える事・・・1支店だけを作成 ・第3に考える事・・・昨対比の判定 ・第4に考える事・・・3支店の繰り返し ・第5に考える事・・・3支店の繰り返しを全体の中に組み込む ・最後に考える事・・・最後の仕上げ ・目指すべきVBAの書き順・・・VBAが上達したら
セルの値で計算を変える(Ifステートメント)
・Ifの説明用のサンプル ・マクロVBAでのIfの使い方 ・Ifステートメントの書き方 ・Ifのネスト(入れ子) ・AndとOr ・ElseIfとSelect Caseについて ・マクロVBAは、プログラミングです ・Ifステートメントの練習問題 ・改行方法について ・ExcelマクロVBA入門等の対応ページ
IFステートメントの判定(ツイッターお題)
・お題のツイート ・解説のツイート ・IFステートメントの判定の最後に


最後に

Ifステートメントがサクッと書けるかどうかでVBAスキルのレベルを判断できると言っても良いでしょう。
IFの文法を理解しても、なかなかサクッとは書けないものです。

ここは、じっくりと習得していってください。
その後も、マクロVBAを書いていく上では常にIfの書き方は意識しながら書いてみてください。




同じテーマ「マクロVBA入門」の記事

第17回.繰り返し処理(Do Loop)

・Do~Loopの構文 ・条件式 ・Do Loop 例文 ・Exit Do ・Do~Loopのネスト(入れ子) ・最後に一言
第18回.最終行の取得(End,Rows.Count)
・エクセルVBAにおける最終行取得の必要性 ・.End(xlDown):Ctrl+↓ ・.End(xlUp):Ctrl+↑ ・Endプロパティの方向(↑↓←→)について ・セルの行数を取得するRowプロパティ ・Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す ・EndプロパティがRangeオブジェクトを返す ・Endプロパティの問題点 ・最終行に関するサイト内のページ
第19回.総合練習問題1
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
前回のIFステートメントでは、真か偽の二択でした。今回は、もっと多くの分岐が必要な、Ifステートメントで多肢条件分岐の場合の書き方です。ステートメントとしては、Ifステートメントです。IfステートメントのElseIfの構文 If条件式1Then 条件式1が真の処理 [ElseIf条件式2Then 条件式2が真の処理…
第22回.条件分岐(Select Case)
・Select Caseステートメントの構文 ・Select Case の例文 ・Select Case の応用
第23回.メッセージボックス(MsgBox関数)
・MsgBox関数の構文 ・名前付き引数 ・MsgBox関数のbuttonsの定数 ・MsgBox関数の戻り値の定数 ・MsgBox関数の例文 ・MsgBoxの使い道
第24回.インプットボックス(InputBox関数)
・InputBox関数の構文 ・名前付き引数 ・InputBox関数の例文
第25回.名前付き引数について
・仮引数と実引数 ・メソッドとは ・名前付き引数について ・名前付き引数の例文 ・名前付き引数の必要性
第26回.総合練習問題2
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第27回.ブック・シートの選択(Select,Activate)
・アクティブ ・ブックをアクティブにする ・シートの選択、シートのアクティブ ・複数シートの選択(作業グループ化) ・複数ブックを開いている時のシート選択 ・VBAでの色々なシート指定方法


新着記事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コードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ