【簡単エクセル/Excel VBA マクロ】If...Then...Else ステートメント|条件分岐 #001



いつもありがとうございます!
ノンプログラマー向け「Excel VBA マクロ 解説シリーズ」へようこそ。
If...Then...Else ステートメントは、プログラムに条件分岐を設定する方法です。
例えば、条件Aが満たされれば処理1を実行、満たされなければ処理2を実行、のように条件によって異なる処理を実装することができます。
機械的に処理を実行するプログラムには限界があります。より効率的なマクロを作成するためには必ず条件分岐処理が必要になります。
本稿では、条件分岐の最も基本的な方法である「If...Then...Else ステートメント」を、とても簡単な例を用いて解説いたします。
VBAにおける条件分岐処理の全体像
VBAにおける「条件分岐処理」には、大きく分けて2つの方法があります。「条件分岐処理」の全体像は以下の記事で解説しております。
本稿では「条件分岐処理」の一部である「If...Then...Else ステートメント」を解説いたします。
VBAで「If…Then…Else ステートメント」使う方法

If…Then…Else ステートメントの基本構文を以下に示します。
If 条件 Then
‘ 条件が True の場合の処理
ElseIf 別の条件 Then
‘ 別の条件がTrueの場合の処理
Else
‘ すべての条件がFalseの場合の処理
End If
If...Then...Else ステートメントの具体例を以下に示します。
Sub sample()
' 変数宣言
Dim wb As Workbook ' ワークブック
Dim ws As Worksheet ' ワークシート
Dim row_idx As Long ' 行インデックス
' ワークブックとワークシートをオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
' For...Nextループで繰り返し処理
For row_idx = 4 To 6
' セルの値が「バナナ」の場合
If ws.Cells(row_idx, 2) = "バナナ" Then
ws.Cells(row_idx, 3) = "120円"
' セルの値が「りんご」の場合
ElseIf ws.Cells(row_idx, 2) = "りんご" Then
ws.Cells(row_idx, 3) = "90円"
' セルの値が上記の2条件以外の場合
Else
ws.Cells(row_idx, 3) = "条件に該当しません"
End If
Next row_idx
End Sub

解説します。
変数の宣言
' 変数宣言
Dim wb As Workbook ' ワークブック
Dim ws As Worksheet ' ワークシート
Dim row_idx As Long ' 行インデックス
冒頭の部分は変数を宣言しています。
Dim 変数 As データ型 の構文で宣言します。
これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。
なお、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。
ワークブックとワークシートをオブジェクト変数として取得
' ワークブックとワークシートをオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
次に、ワークブックとワークシートを、オブジェクト変数として格納しています。
wb.Worksheets(1)
のカッコ内の数値1は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。
If...Then...Else ステートメントを用いて条件分岐処理を実装
' For...Nextループで繰り返し処理
For row_idx = 4 To 6
' セルの値が「バナナ」の場合
If ws.Cells(row_idx, 2) = "バナナ" Then
ws.Cells(row_idx, 3) = "120円"
' セルの値が「りんご」の場合
ElseIf ws.Cells(row_idx, 2) = "りんご" Then
ws.Cells(row_idx, 3) = "90円"
' セルの値が上記の2条件以外の場合
Else
ws.Cells(row_idx, 3) = "条件に該当しません"
End If
Next row_idx
次に、繰り返し処理を実行しています。
1行目の For row_idx = 1 To 6
は、変数 row_idx を1から6まで1ずつ変化させていくことを意味し、変数が1増加するごとに、繰り返し処理部が実行されていきます。
2~3行目はセルの値が「バナナ」だった場合、その隣のセルに「120円」を書き込むコードです。
4~5行目はセルの値が「りんご」だった場合、その隣のセルに「90円」を書き込むコードです。
6~7行目はセルの値が上記2条件のいずれでも無い場合に行う処理です。「条件に該当しません」というテキストを隣のセルに書き込みます。
以上が、If...Then...Else ステートメントの基本的な使い方です。

ご覧いただきありがとうございました!
関連記事
本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。
- 【簡単エクセル/Excel VBA マクロ】解説シリーズ目次 | みんなの実用学(jitsuyogaku.com)
- 【簡単エクセル/Excel VBA マクロ】Excel VBA マクロの全体像 | みんなの実用学 (jitsuyogaku.com)
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。

おわりに


ご覧いただきありがとうございました!
今回の記事では、「条件分岐処理」の中の「If...Then...Else ステートメント」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)