Excel VBA

エクセルVBAのIf文がわかる!論理演算子やElseIf文についても解説

近年の働き方改革により、業務効率化を図るためにエクセルVBAを勉強している人も多いのではないでしょうか?

エクセルVBA使われる条件分岐のIf文はややこしい点も多く学習しているときにつまずきやすいところのひとつです。
この記事では、If文の役割について説明し、実際にIf文を使うコードも紹介しますので、If文について分からない方はぜひ参考にしてくださいね。

エクセルVBAにおけるIf文の役割について

ここではエクセルVBAおけるIf文の役割について解説します。

If文の役割を理解することで、その使い方もイメージできるようになるので、しっかり確認しておいてくださいね。

エクセルVBAは

If文の役割について解説する前に、まずはエクセルVBAとは何かについて簡単に説明します。

エクセルVBAはExcelを自動化するための機能「マクロ」を作るためのプログラミング言語です。よく「マクロ」と「VBA」を間違えて理解している人がいるので、この点はしっかり押さえておきましょう。

VBAを使わなくてもExcelだけでマクロを作成することはできますが、VBA使うとより複雑な処理のマクロを作成できます。
マクロを利用することにより、「同じ形式の報告書を作成する」「会社の経費精算」のような単調な作業の効率化を図ることができます。

まとめると、エクセルVBAは業務効率化を目的としたマクロを作成するプログラミング言語になります。

If文の役割とは

エクセルVBAにおいて、If文は条件分岐のために使われます。条件分岐とは「もし◯◯なら✗✗を行う、そうでなければ■■を行う」といった処理のことを指します。

例えばテストの点数を判断して、それぞれに対応した言葉を表示するプログラムを作りたいとしましょう。もし入力した数値が100点ならば「満点です」と表示し、そうでなければ「満点ではありません」と表示させたいとします。
この場合、VBAではIf文を使って処理を分岐させることになります。

このプログラムは後で実際にコードを書いていくことにして、ここではIf文を使うと条件分岐ができることを理解しておいてくださいね。

If~Then~Elseを使用した条件分岐の方法

それでは実際にコードを使って解説していきます。分からなくなったら前に戻ってIf文の役割から見直してみてくださいね。

If文の構文

ここでは、一般的に使われているIf文の構文をいくつか解説します。
まず、基本的なIf文の使い方を紹介します。

1.If 条件式 Then
2.  処理1
3.Else
4.  処理2
5.End If

1行目は「もし〇〇なら」にあたり、分岐条件を記述します。この条件に当てはまったときには2行目の「処理1」が実行されます。3行目は「そうでなければ」にあたり、1行目の条件に当てはまらなかった場合には4行目の「処理2」が実行されます。5行目はIf文の終わりを表す行です。

これが基本的なIf文の使い方です。

次に論理演算子を使ったIfの構文を解説します。

1.If 条件式1 And 条件式2 Then
2.  処理1
3.Else
4.  処理2
5.End If

上記のコードでは、条件式1と条件式2がともに満たされた場合に処理1を行い、どちらか一方でも当てはまらない場合には処理2が実行されます。

上記の論理演算を使ったIf文も基本的なIf文の使い方と同じ構造になっています。異なるのは1行目の条件式が2つになっていることです。
後で詳しく解説しますが、このように論理演算子「And」を使うことで複数の条件式を組み合わせることができます。

ではIf文の条件式にはどのようなものがあるのでしょうか。多くの場合、条件式には比較演算子を使うことになります。

1.If 数値1 >= 数値2 Then
2.  処理1
3.Else
4.  処理2
5.End If

上記のコードでは、数値1が数値2以上のときに処理1が実行され、それ以外の場合に処理2が実行されます。

比較演算についても後から詳しく解説しますが、2つの値を比較するときに使われるのが比較演算子です。

論理演算子も比較演算子もIf文ではよく使われるので、どのように条件処理が行われるかを確認していきましょう。

TrueとFalseについて

論理演算子・比較演算子について解説する前に、「True」と「False」について説明します。

「True」「False」は条件式が満たされているかどうかを表す値です。条件式が満たされている場合は「真」すなわち「True」、満たされていない場合は「偽」すなわち「False」となります。

よく分からない人は「True」のとき処理が実行され、「False」のとき処理は実行されないと覚えておけば大丈夫です。

論理演算子の一覧

論理演算子はいくつかの条件式から新しい条件式を作るときに使われる演算子です。具体的には「すべての条件を満たす場合」、「少なくともひとつの条件を満たす場合」、「条件を満たさない場合」に条件分岐させることができます。

下に論理演算子の一覧を示します。

論理演算子 使い方・意味
And A And B
「AがTrue」かつ
「BがTrue」のときTrue
A = 5 And B = 5
AとBがともに5のときTrue
Or A Or B
「AがTrue」または
「BがTrue」のときTrue
A = 5 Or B = 5
AとBの少なくとも一方が5のとき
True
Not Not A
「AがFalse」のときTrue
Not A = 5
Aが5ではないときTrue

「Not」を使った演算子が少しややこしいので、気をつけましょう。

比較演算子の一覧

条件で数値を比較するときには比較演算子が使われます。

比較演算子 使い方・意味
A > B
AがBよりも大きいときTrue
A > 5
Aが5よりも大きいとき
True
>= A >= B
AがB以上のときTrue
A >= 5
Aが5以上のときTrue
A < B
AがBよりも小さいときTrue
A < 5
Aが5よりも小さいとき
True
<= A <= B
AがB以下のときTrue
A <= 5
Aが5以下のときTrue
A = B
AがBと等しいときTrue
A = 5
Aが5と等しいときTrue
<> A <> B
AとBが等しくないときTrue
A <> 5
Aが5と等しくないとき
True

「>=」や「<=」で「=」の位置が反対だと比較演算子と認識されず、エラーが出るので注意が必要です。

それぞれの構文の具体的な使用例

それではIf文の構文を実際のコードで解説していきます。
いくつか例を出しますので、自分が試してみたいコードに近いものを練習してみてくださいね。

まずはテストの点数を判断して100点ならば「満点です」、それ以外の場合は「満点ではありません」と表示するコードを記述します。

上記のコードはA1セルの値に応じてB1セルに文字列を表示するコードです。
実際にA1セルに「100」と入力するとB1セルに「満点です」と表示されます。

次にA1セルに100以外の数値を入力してみます。今回は「30」としてB1の結果を見てみましょう。


B1セルに「満点ではありません」と表示されました。

それでは実際のコードを1文ずつ解説していきますね。

1. Sub テストの点数()
2. If Range("a1").Value = 100 Then
3.  Range("b1").Value = "満点です"
4. Else
5.  Range("b1").Value = "満点ではありません"
6. End If
7. End Sub

まず1行目でプロシージャを呼び出します。ここではプロシージャ名を「テストの点数」としています。

2行目からがIf文です。ここでの条件式は「もしA1セルの数値が100だったら」を表しています。Thenが「〜だったら」という意味ですね。
3行目はA1セルの値が100だった場合の処理を記述しています。ここではB1セルに「満点です」と表示させています。
4行目のElseは「そうでなければ」を表し、5行目にA1セルの値が100でなかった場合の処理を記述しています。ここではB1セルに「満点ではありません」と表示させています。

6行目の「End If」はIf文の終わりを意味するので、ここでIf文の条件処理は終了します。7行目はプロシージャの終わりになります。

条件処理の流れを見てみると意外と簡単に思えるのではないでしょうか。

If文は長いコードになるとややこしくなりますが、実際にコードを分解してみると分かりやすくなりますよ。

次に論理演算子を使ったものを紹介します。


上記のコードはスケジュールに対するプログラムで、C8セルの曜日が「土」または「日」の場合に「休日です。」、月〜金の場合に「平日です。」と表示します。上記のコードでは論理演算子「Or」を使用しているため、どちらかの条件が当てはまるときに最初の処理が実行されます。

実際にプログラムを実行してみると以下の結果になります。


C8セルが「日」なので、「休日です。」と表示されます。

次にセルの指定をC9に変更してみます。


セルをC9に指定すると、「土」でも「日」でもないため、「平日です。」と表示されます。

それでは使用したコードを1行ずつ解説していきます。

1. Sub スケジュール()
2.   If Range("C8")="土"Or Range("C8")="日"Then
3. MsgBox "休日です。"
4. Else
5. MsgBox "平日です。"
6. End If
7. End Sub

まず1行目にプロシージャを呼び出します。ここでは「スケジュール」としています。

2行目、3行目のIf文ではC8セルに「土」または「日」が入力されているとき、メッセージボックスで「休日です。」と表示させています。4行目、5行目では、「土」または「日」以外、つまり「月〜金」の曜日が入力されている場合に「平日です。」とメッセージボックスで表示させています。

6行目、7行目はIf文・プロシージャの終わりの宣言です。

このように、論理演算子を使用すると条件分岐をより詳細に分けることができます。

3つ目に紹介するコードは比較演算子を使用したコードです。


上記のコードは点数が70以上だった場合に「合格」、それ以外の場合に「不合格」と表示するプログラムです。今回はC2セルの結果を参照し、条件分岐の結果をD2セルに表示しています。
実際に実行した結果が以下になります。


C2セルの数値が75で70以上のため、D2セルに「合格」と表示されます。

次に点数が70以上ではないときはどのような結果が表示されるかを見てみます。
条件分岐のセルをC3に指定して、結果をD3セルに反映させてみましょう。


C3セルの値は「59」で70以下だったため、「不合格」と表示されました。

それではコードを解説していきましょう。

1. Sub 合否判定()
2.  If Range("c2") >= 70 Then
3.   Range("d2") = "合格"
4.  Else
5.   Range("d2") = "不合格"
6.  End If
7. End Sub

基本的なIf文の使い方は変わりませんが、2行目のIf文で比較演算子を使用しています。

2行目・3行目のコードではC2セルの値が70以上だったときに「合格」と表示させ、4行目・5行目で70より小さい数値だった場合「不合格」と表示させています。

このように、比較演算子を使用すると数値の比較ができます。

複数条件の分岐をする方法

先ほどは「もし◯◯なら✗✗」する条件分岐をコードに記述しましたが、複数の条件を分岐する場合にはElse Ifを使います。

ElseIfを使うと「もし◯◯なら✗✗を行う。そうでないとき、もし☆☆なら△△を行い、それ以外の場合は△△を行う」といった条件分岐ができます。

ここでも、実際のコードを記述していきながら解説していきますね。

ElseIfを使用して条件分岐を増やす

ElseIfは条件分岐を複数行うときに使われる構文です。実際のコードを例にして解説しますね。


以上のコードはA1セルに数値を入力したときに対応した文字列をA2セルに表示するプログラムです。ここでは数値が80より大きいときに「最高です」、80以下で60より大きいときに「頑張りました」、それ以外のときに「もう少し頑張りましょう」と表示させています。

実際に数値を入力してみた結果が以下になります。


A1セルに90と入力すると、A2セルには「最高です」と表示されました。
同じ要領でA1セルの数値を変更してみます。


次はA1セルに70と入力しました。コードに記述してある通り、「頑張りました」と表示されましたね。最後に数値を10にしてみましょう。


プログラム通りに反映されました。

それでは実際のコードを解説しますね。

1.Sub 点数()
2. If Range("a1") > 80 Then
3.  Range("a2") = "最高です"
4. ElseIf Range("a1") > 60 Then
5.  Range("a2") = "頑張りました"
6. Else
7.  Range("a2") = "もう少し頑張りましょう"
8. End If
9. End Sub

先ほどまでと異なる点は、4行目にElseIfのコードが増えたことです。
4行目では、2行目の条件に当てはまらなかった場合にさらに処理を分岐させています。ここではA1セルの数値が60より大きい場合に5行目の処理を実行させています。

A1セルの値が70だった場合には、最初の条件に当てはまらず、2つ目の条件が当てはまるので、5行目の処理が実行されます。

もちろん、すべての条件に当てはまらない場合は、それ以外の処理を実行するElseの処理が行われます。

まとめると、ElseIfはIf文の条件をさらに分岐できる構文です。

論理演算子「And」を使用して条件分岐を増やす

1つ前では、分岐を増やす方法としてElseIfを使う方法を解説しましたが、論理演算子を使用して条件分岐を増やす方法もあります。ここでは分かりやすい論理演算子「And」と「Or」を使用して解説しますね。


上記のコードでは論理演算子「And」を使用して条件分岐を増やしています。
C2セルの数値が80以上、かつD2セルの数値が80以上という条件が満たされたときにE2セルに「評価A」と表示させ、それ以外の場合は「評価B」と表示させています。

実際にC2・D2セルに数値を90と入力すると判定結果に「評価A」と表示されました。


それでは、D2セルに60と入力してみると、結果はどうなるのでしょうか。


論理演算子「And」は両方を満たしているときにTrueとなって処理が実行されるのでした。今回はD2セルが80以上ではないために処理が実行されず、「評価B」と表示されました。
同様に、両方のセルに80以下の数値を入力しても「評価B」が表示されます。


このように、論理演算子を使用して条件分岐を増やすこともできます。

論理演算子「Or」を使用して条件分岐を増やす

もう1つ論理演算子を使い、条件分岐を増やしてみます。ここでは論理演算子「Or」を使用して条件分岐を増やします。

「And」を使ったときのコードで、「And」を「Or」に変更しましょう。


「And」を使用したものはどちらの条件も満たされなければ実行されませんでしたが、「Or」を使用するとどちらか一方でも満たされた場合に処理が実行されます。

今回はC2セルかD2セルに80以上の数値が入力されたときに「評価A」が表示され、どちらにも80以上の数値が入力されなかった場合に「評価B」が表示されます。
C2セルに数値80を入力し、D2セルに数値30を入力した結果が以下の通りです。


続いてC2セル・D2セルの値をともに90とした場合と、40とした場合の実行結果を示します。


コードの通り、片方に80以上の数値が入力された場合に「評価A」、どちらにも80以上の数値が入力されなかった場合に「評価B」が表示されることが分かります。
上記の通り、論理演算子「Or」を使って条件分岐を行うと、片方の条件式が満たされた場合に処理が実行されます。

If文のネストの使い方

ここまではIf文の役割や具体的な使用例を紹介してきました。
実際にIf文を使ってコードを記述しているとIf文の中で再度If文を使いたい場合があります。

If文の中でIf文を記述することを「ネスト」と言い、より詳細に条件分岐させることができます。ここからはこのネストについて解説していきます。

ネストの具体的な使用例

先ほど説明した通り、ネストとはIf文の中にIf文を記述することです。
言葉だけで説明しても分かりにくいかもしれないので、実際のコードを例にして解説しますね。


上記のコードはA1セルに100、B1セルに200を入力すると「A1が100でB1が200です。」、A1セルに100、B1セルに200以外の数値を入力すると「A1は100ですが、B1は分かりません。」、それ以外は「分かりません」とメッセージボックスを表示するプログラムです。

実際にA1セルに100、B1セルに200を入力すると以下の通りになります。


マクロを実行してみるとメッセージボックスに「A1が100でB1が200です。」と表示されています。

続いてA1セルに100、B1セルに500を入力して確認してみます。


メッセージボックスには「A1は100ですが、B1は分かりません。」と出ています。
最後に両方に適当な数値を入れて実行してみます。


メッセージで「分かりません。」と出ていますね。

それでは、実際に記述したコードを解説していきますね。

1. Sub ネスト()
2.  If Range("A1") = 100 Then
3.   If Range("B1") = 200 Then
4.    MsgBox "A1が100でB1が200です。"
5.   Else
6.    MsgBox "A1は100ですがB1は分かりません。"
7.   End If
8.  Else
9.   MsgBox "分かりません。"
10.  End If
11. End Sub

2行目にある1つ目のIf文で「A1の値が100かどうか」で条件分岐させています。A1の値が100のとき、3行目のネストされたIf文でさらに「B1の値が200かどうか」で処理を分岐させていますね。

結局、

A1の値が100かつB1の値が200のときは「A1は100でB1が200です。」
A1の値が100かつB1の値が200以外のときは「A1は100ですがB1は分かりません。」
A1の値が100以外のときは「分かりません。」

と表示されることになります。
このように、If文の中にIf文を「ネスト」させることができます。ややこしくなったときは1つずつ条件処理のコードを見ていくと分かりやすいですよ。

ネストを使うときの注意点

If文を使ってコードを書いていると、ネストしたい場面が出てきます。ですが、ネストを使うとコードが見にくくなるので注意が必要です。

実際の開発現場では1人で開発するのではなく、複数人で開発を行うのが主流となります。自分が後から見たときにわかりやすいようにするためにも、コードを記述するときは人に見せる前提で書くようにしましょう。

まとめ

エクセルVBAのIf文は実際にプログラミングをしていると使用頻度の高い構文になります。ですが、要点を覚えておけば思ったほど難しいことはありません。
エクセルVBAのIf文でつまずいた方はこの記事を参考に勉強してみてくださいね。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。