ExcelマクロVBA入門
第20回.条件分岐(IF)

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2019-06-11

第20回.条件分岐(IF)


ある条件の時だけ処理したい事もあれば、条件によって処理内容を変更したい事もあります、


条件により処理を分岐させたい場合に使うのが、Ifステートメントです。

VBAマクロで自動化する場合の多くは、

条件により処理を変えつつ一定回数繰り返すという事です。

プログラムにおいて、最も重要なステートメントがIfステートメントと言えます。


Ifステートメントの構文

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

または

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

[]は省略可能です。

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

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

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

条件式
Ifで判定する条件を、
真(True)か偽(False)を評価する数式または文字列式を指定します。

数式とは、数値と比較演算子・論理演算子の組み合わせ、
文字列式とは、文字列と比較演算子・論理演算子の組み合わせです。

比較演算子 意味
= 等しい
<> 等しくない
> より大きい
>= 以上
< より小さい
<= 以下

論理演算子 意味
And 論理積
Or 論理和
Xor 排他論理和
Eqv 論理等価
Imp 論理包含
Not 論理否定



And、Or、Not以外の論理演算子は使用する必要はないでしょう。


Ifの使用例文

例文1.

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


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

例文2.

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


例文1.と同じです。

特に事情(1行で書く事でプログラムの可読性を高めたい等の場合)が無い限り、こちらを使いましよう。

例文3.


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


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

例文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ステートメントやSelectCaseに出くわします。

実は奥が深いIfステートメント
プログラムと言うものは条件により処理する これにつきます。つまりこの条件が一番問題となります。そしてその記述をするものがIfステートメントになります。If条件式Then 条件式が真(True)の場合の処理 Else 条件式が偽(False)の場合の処理 EndIf 条件式は真(True)か偽(False)を評価する数式または文字列式を指定します。

ForとIfのネストこそがVBAの要点
VBA習得で最も肝心なものは、For文とIf文をしっかりと覚えることです、そして、For文とIf文をネストさせるプログラミング技術の習得です。For~Nextステートメントは、繰り返し処理 If~EndIfステートメントは、条件分岐 つまり、条件により分岐しつつ繰り返し処理を行う。

セルの値で計算を変える(Ifステートメント)
エクセルでは、他の列の値によって計算式を変えたりすることが多々あります、つまり、条件により処理を分けるということです、シートではIF関数を使いますが、マクロVBAでもIfなのですが書き方が違います。以下の表を使いましょう。単価が、税込み単価と、税抜き単価が混在している表になります。


最後に

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

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



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

繰り返し処理(Do Loop)
最終行の取得(End,Rows.Count)
総合練習問題1
条件分岐(IF)
条件分岐(ElseIf)
条件分岐(Select Case)
メッセージボックス(MsgBox関数)
インプットボックス(InputBox関数)
名前付き引数について
総合練習問題2
ブック・シートの選択(Select,Activate)


新着記事NEW ・・・新着記事一覧を見る

IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.繰り返し処理(For Next)|ExcelマクロVBA入門
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄


  • >
  • >
  • >
  • 条件分岐(IF)

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


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






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