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

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

第20回.条件分岐(IF)


マクロ VBA 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以外の論理演算子は当分は使用する必要はないでしょう。
特にマクロVBAを他人と共有する場合は、自分が分かるからといってむやみに難しいものを使うことは避けるべきです。

Ifの使用例文

例文1.

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


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

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入門」の記事

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


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

VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)
VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(10月14日)


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

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



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

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


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




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