サイト内検索

VBA基本構文 基本

VBAコードの分岐条件(IF文)

If文はVBAコードを処理する流れの途中で、条件により処理を分けたい時に使用する基本コードです。VBAに限らず多くのプログラミング言語でも頻繁に利用される基本構文ですので、本記事でも詳しく解説していきます。

サンプルシート

まずはサンプルファイルの中から本記事で使用するサンプルシートのご紹介です。

本記事で使用するサンプルシート(SampleSheet01)
本記事で使用するサンプルシート(SampleSheet01)

ある果物屋さんの商品管理リストを使います。項目は、商品ID、商品名、在庫、原価、仕入担当、仕入先、価格更新日の7項目です。レコード数は15です。

サンプルコード

続いてサンプルコードのご紹介です。

 

サンプルコードの内容ですが、サンプルシートから「みかん」の原価を取得し、その原価が「100円未満」か「100円以上」かで処理を分け、結果を表示するというものです。

サンプルコード実行結果

それでは、カーソル位置を確認してから▶ボタンか「F5」キーを押して、コードを実行してみてください。

実行すると下図のように、Msgbox関数により「原価は100円未満です」と表示されます。ワークシート上のみかんの原価(20円)の条件と一致しましたよね。

If文の結果をMsgBoxウィンドウで結果表示
みかんの原価は100円未満!

サンプルコードのアルゴリズム

6行目:Dim r As Integer
7行目:Dim lngPrice As Long

変数の宣言になります。変数rはこれまでのように、行番号を入れるための変数です。また、変数lngPriceは原価を入れるための変数です。原価は整数値しかとりませんので、長整数型で宣言しています。

Tips
整数型(Integer)と長整数型(Long)

9行目:r = 4
10行目:lngPrice = Cells(r, 4)

初期条件として、みかんのレコードに関する情報を変数に入れています。前述のサンプルシートから、みかんの行番号は4ですね。(商品IDの3と間違えやすいので注意してくださいね。)

価格の変数「lngPrice」には、みかんのレコード行(ワークシート4行目)の4列目(「原価」データが記載されている列)のセルの値を代入しています。

13~21行目:If~End If
この間が分岐処理の構文になります。少し理解しやすくするために、下図を追加しますね。

If文の分岐条件をやさしく解説
If文詳細

まず、13行目「If lngPrice < 100 then」、17行目「else」は、条件判定箇所になります。そして、色付きの枠で囲った2か所のコードは、各条件が満たされた場合に実行されるVBAコードになります。

では上から詳くわしくお話ししますね。「If lngPrice < 100 then」は条件判定箇所になります。「原価が100円より小さい」の条件が、真(True)か偽(False)かを判断しています。

そして、もし条件が真(True、原価が100円より小さい)の場合、緑色の枠で囲まれたVBAコードを実行します。

次の条件判定箇所「Else」は、「その他の条件を満たす場合」の意味で、この例では「原価が100円以上」(100円未満でなければ、100円以上しかないから)がその他の条件として解釈され、その場合は青枠内のコードが実行されることになります。

このように、If文は上から条件判定を行い、その条件が満たされた(真、正しい、True)場合は、その条件判定箇所の直下の処理(緑枠や青枠のVBAコードのこと)を行います。

ElseIf ~ Then で条件分岐を増やす

前項のIf文の例では、If ~ Else ~ EndIFという基本的な構造でしたが、以下の図に示したように、途中の条件式を増やすことも可能です。その際、追加する条件式は、「ElseIf (条件式) Then」を使います。

ElseIf ~ Thenで分岐を増やせる
ElseIf ~ Thenで分岐を増やせる

図は条件分岐が3つある場合の例です。サンプルコードに対して、条件式が1か所「ElseIf ~ Then」の分増えています。

ここでもう一度If文の処理の流れについてまとめておきますね。

If文は上から条件判定がされますので、この場合、まず条件1が成立すれば①内のVBAコードが処理され、②、③は実行されません。

もし条件1が成立せず、次の条件2が成立した場合は②内のードが実行され、結果的に①、③は実行されません。

同じ理屈で、条件1も条件2も満たされない場合はElse直下の③内のコードが実行され、結果的に①、②は実行されません。

また上の例では3つの分岐条件の例ですが、「ElseIf ~ Then」によりいくつでも分岐条件を増やすことが可能です。ただし、あまり多くの分岐条件が連なるとコードの可読性が悪くなりますので気を付けてくださいね。

If文のネスティング

If文は下図のようにネスティング(入れ子構造)にして利用することも可能です。ただし、何重にもネスティングをすると可読性が悪くなりますので、多くても3重から4重くらいに抑えて利用したいものです。

また、If文は処理コードが短い場合、緑文字で示したように一行で記述することも可能です。

Ifのネスティング
Ifのネスティング

まとめ

VBAコードの分岐条件構造の一つ、If構文についてお話ししました。分岐条件についても、繰り返し構造と同様、大変重要な基本構造ですので、まずは今回紹介しましたIf文の使い方をぜひマスターしてくださいね。

Tips:If文以外のVBA基本構文
For ~ Next文(繰り返し)
For Each ~ Next文(繰り返し)
Do ~ Loop文(繰り返し)
Select文(分岐)

[スポンサーリンク]



サイト内検索

-VBA基本構文, 基本
-

Copyright© 集計用VBAサンプルコードをやさしく学ぼう , 2020 All Rights Reserved.