VBAを使い始めたとき、「なんとなく書いているけど意味がよくわからない」「エラーが出てしまう」という壁にぶつかる方は多いです。その原因の多くは、プログラムの基本構造が整理できていないことにあります。
VBAのすべての処理は「順次・分岐・繰り返し」の3つで成り立っています。この記事ではそれぞれの役割をコード例で解説し、最後に3つを組み合わせた実務例も紹介します。
順次処理とは?
順次処理とは、コードを上から順番に1行ずつ実行する基本の動きです。特別な構文はなく、書いた順に処理されます。
Sub 順次処理の例()
Range("A1").Value = "処理1"
Range("A2").Value = "処理2"
Range("A3").Value = "処理3"
End Sub
A1→A2→A3の順に書き込まれます。すべてのプログラムはこの「上から順に実行する」という原則から始まります。
分岐処理(If〜Then)を使うには?
分岐処理とは、条件によって実行する処理を変える仕組みです。代表的な構文が If〜Then〜Else です。
Sub 分岐処理の例()
Dim 点数 As Integer
点数 = Range("B1").Value
If 点数 >= 80 Then
Range("C1").Value = "合格"
Else
Range("C1").Value = "不合格"
End If
End Sub
「点数が80以上なら合格、そうでなければ不合格」という判定を自動で行います。業務では「金額が〇〇円以上なら値引き」「在庫がなければ発注」などの条件判断によく使われます。
繰り返し処理(For〜Next)を使うには?
繰り返し処理とは、同じ処理を指定した回数だけ自動で繰り返す仕組みです。代表的な構文が For〜Next です。
Sub 繰り返し処理の例()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End Sub
A1〜A10に「1〜10」の数字が書き込まれます。データの自動入力・連番の生成・一覧の一括処理など、繰り返しを使う場面は非常に多いです。
3つの構造を組み合わせた実務例とは?
実際の業務では、順次・分岐・繰り返しを組み合わせて使います。次の例は「名前と点数のリストを読み取り、点数に応じて合否をC列に記入する」処理です。
Sub 基本構造の応用例()
Dim i As Long
Dim 点数 As Long
Dim 最終行 As Long
' A列(名前)の最終行を取得(順次)
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
' 2行目から最終行までループ(繰り返し)
For i = 2 To 最終行
点数 = Cells(i, 2).Value
' 点数で合否を判定(分岐)
If 点数 >= 80 Then
Cells(i, 3).Value = "合格"
Else
Cells(i, 3).Value = "不合格"
End If
Next i
End Sub
「一覧表に対してループ処理をかけ、条件によって結果を変える」という構成です。この組み合わせができるようになると、VBAの実務活用がぐっと広がります。
まとめ
- 順次処理:コードを上から順に1行ずつ実行する。すべての基本
- 分岐処理(
If〜Then〜Else):条件によって実行する処理を変える - 繰り返し処理(
For〜Next):同じ処理を指定した回数だけ自動で繰り返す - 実務では3つを組み合わせるのが基本。「ループ+条件判定」が最頻出パターン
- この3構造を理解すると、マクロの設計力と読解力が大きく上がる
よくある質問
順次・分岐・繰り返しの3つだけでマクロは作れますか?
基本的な業務マクロのほとんどはこの3つの組み合わせで作れます。変数や関数など他の要素もありますが、まずこの3構造を理解することが実践の土台になります。
If〜ThenとSelect Caseはどう使い分けますか?
条件が2〜3パターンなら If〜Then〜Else、4パターン以上になる場合や同じ変数で多くの値を比較するときは Select Case の方がコードをすっきり書けます。
For〜Next以外の繰り返し構文はありますか?
あります。Do While〜Loop(条件が真の間繰り返す)や For Each〜Next(コレクションの各要素に対して繰り返す)もよく使われます。繰り返す回数が決まっているなら For〜Next、条件次第で回数が変わるなら Do While が適しています。
繰り返しの中に分岐を入れてもいいですか?
はい、むしろそれが実務での典型的な使い方です。For〜Next の中に If〜Then を入れて「各行の値を条件で判定しながら処理する」というパターンが最もよく使われます。
最終行を取得する Cells(Rows.Count, 1).End(xlUp).Row とは何ですか?
A列の一番下のセルから上方向に向かって、データが入っている最後のセルの行番号を取得する書き方です。データ件数が変わっても自動的に最終行を取得できるため、繰り返し処理の終端としてよく使われます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



