Excel VBA初心者が最初に覚える基本ルール集|変数・型・書き方を実例で整理
はじめに:この記事でできるようになること
この記事は、Excel VBAの基本構文として「変数」「If文」「For Next」を最小の例で動かしながら理解するための入門②です。
入門①との違いと、入門②のゴール
入門①が「VBAとは何か」「マクロとVBAの関係」といった全体像の理解に寄るのに対して、入門②は「実際に書ける」ことを最優先にします。
このページを読み終える頃には、短いマクロを自分で組み立てて、値を入れて、条件で分けて、繰り返しで処理できる状態を目指します。
この記事を読む前に知っておくと楽になる前提(VBE・マクロ実行)
VBAはVBE(Visual Basic Editor)という編集画面でコードを書き、標準モジュールに貼り付けて実行します。
最初は「書く場所」と「実行する方法」だけ分かっていれば十分なので、細かい設定よりもまず動かすことを優先してください。
変数の宣言とデータ型:まずは「箱」を用意する
変数は、値を入れておき、後で同じ値を何度も使い回すための「箱」のようなものです。
変数とは何か(値を入れて使い回す仕組み)
同じ数字や文字を何度も書く代わりに変数へ入れておくと、読みやすさと修正のしやすさが上がります。
変数は「名前を付けた入れ物」なので、何を入れているかが名前から想像できるようにすると迷子になりにくいです。
Dimの基本形と、よく使うデータ型(Integer/Long/String)
VBAでは、変数を使う前にDimで宣言するのが基本です。
次の例は、数値用のLongと、文字列用のStringを宣言して使います。
- `Dim i As Long`
- `Dim userName As String`
Integerは範囲が小さく、Longはより大きな数を扱えるので、迷ったらLongを使う方が事故が減ります。
文字列はStringで扱い、数値と混ぜるときは意図しない型変換が起きないように気を付けます。
Option Explicitと「変数が未定義」エラーの防ぎ方
Option Explicitを使うと、宣言していない変数名の打ち間違いを早い段階で見つけられます。
変数名を間違えてもVBAが勝手に新しい変数として扱ってしまうと、動くけれど結果が変になる問題が起きやすいです。
「変数がよく分からない」と感じたら、まずは変数の考え方を短く整理したVBAの変数の使い方も一緒に読むと理解が速くなります。
すぐ試せるミニ例:変数に入れてメッセージ表示する
最初の練習は、変数に値を入れてMsgBoxで表示するだけで十分です。
- 例コード(そのまま貼り付けて実行できます)。
- `Sub Sample_Var()`
- ` Dim userName As String`
- ` userName = “田中”`
- ` MsgBox “こんにちは、” & userName & “さん”`
- `End Sub`
この例では、userNameの中身を変えればメッセージ全体が変わるので、変数の「使い回せる」感覚がつかめます。
条件分岐(If文):条件で処理を分ける
If文は、条件が真のときだけ処理を実行したり、条件によって処理を切り替えたりするための基本構文です。
If〜Thenの最小形と読み方
Ifの次に条件を書き、Thenの後に実行したい処理を書きます。
最小の形は「もし条件が成り立つならこれをする」です。
- `If score >= 60 Then MsgBox “合格”`
まずは1行で書ける形から慣れると、読み方が分かりやすいです。
Else/ElseIfで分岐を増やすときの考え方
条件が成り立たない場合の処理はElseで書けます。
条件が複数あるときはElseIfを使い、上から順に当てはまるものが実行されます。
- `If score >= 80 Then`
- ` MsgBox “A”`
- `ElseIf score >= 60 Then`
- ` MsgBox “B”`
- `Else`
- ` MsgBox “C”`
- `End If`
分岐が増えるほど読みづらくなるので、条件は「何を判定したいか」を短い日本語にしてからコードに落とすと迷いにくいです。
条件式で使う比較演算子(= <> > < >= <=)
条件式は、左右を比べて真か偽かを決める式です。
よく使う比較は「等しい」「等しくない」「大きい」「小さい」「以上」「以下」です。
- `=`:等しい
- `<>`:等しくない
- `>`:より大きい
- `<`:より小さい
- `>=`:以上
- `<=`:以下
文字列の比較は見た目が同じでも空白や全角半角の違いで一致しないことがあるので、データの前処理も意識します。
ありがちなミス:文字列比較・空白・型の違いでハマる例
If文でよくある失敗は、数値のつもりが文字列になっていて比較が意図どおりに動かないことです。
セルから読んだ値は見た目が数字でも型が曖昧なことがあるので、必要ならCDecなどで明示的に変換します。
また、文字列の末尾に余計な空白が入っていると一致しないので、Trimで空白を取る考え方を覚えると便利です。
Ifの書き方を手元で増やしながら覚えたい場合は、例が多いIf文の書き方を見て「どの形が読みやすいか」を確認するのが近道です。
繰り返し処理(For Next):同じ処理をまとめて回す
For Nextは、同じ処理を決めた回数だけ繰り返すための基本構文で、セルを順番に処理する場面でよく使います。
For〜Nextの基本形(カウンタ変数の動き)
Forの行で開始値と終了値を決め、Nextでループを閉じます。
– `Dim i As Long`
- `For i = 1 To 5`
- ` Debug.Print i`
- `Next i`
iは1から始まり、1ずつ増えて5まで進むので、まずは「回数を数える箱」として理解すればOKです。
Stepで増分を変える/逆方向ループの基本
Stepを付けると、1ずつではなく2ずつ増やすなどの調整ができます。
- `For i = 1 To 10 Step 2`
- ` Debug.Print i`
- `Next i`
逆方向に回したいときは、開始値を大きくして、Stepをマイナスにします。
- `For i = 10 To 1 Step -1`
- ` Debug.Print i`
- `Next i`
逆方向ループは行削除などで安全性が上がることがあるので、覚えておくと便利です。
Exit Forで途中終了するパターン
ループの途中で条件を満たしたら止めたいときはExit Forを使います。
- `For i = 1 To 100`
- ` If Cells(i, 1).Value = “終了” Then Exit For`
- `Next i`
途中終了は処理時間の節約にもなるので、探し物をするループと相性が良いです。
実用ミニ例:指定範囲のセルを順番に処理する
最初の実用例は、A1からA5までを順番に読み、空白ならスキップして表示する形が分かりやすいです。
- `Sub Sample_For()`
- ` Dim i As Long`
- ` For i = 1 To 5`
- ` If Cells(i, 1).Value <> “” Then`
- ` Debug.Print Cells(i, 1).Value`
- ` End If`
- ` Next i`
- `End Sub`
この例は「Forで回す」「Ifで分ける」「Cellsで値を取る」を同時に練習できるので、入門②の要点が一気にまとまります。
For Nextのパターンを増やしたい場合は、用途別の例がまとまったFor Nextの使い方を見て、今の作業に近い形から真似すると覚えやすいです。
まとめ:入門②の要点と次に学ぶと伸びること
入門②で覚えるべきポイントは、変数で値を保持し、Ifで分岐し、For Nextで繰り返すという流れを自分で組み立てられるようになることです。
最初は「短くても最後まで動くマクロ」を1本作ることを目標にすると、理解が点ではなく線になります。
うまく動かないときは、変数に入っている値と、Ifの判定結果と、Forの回数が想定どおりかを順番に確認します。
今日の要点(変数・If・For Nextの使い分け)
変数は「値の名前付け」として使い、Ifは「条件で処理を変える」ために使い、For Nextは「同じ処理をまとめる」ために使います。
変数があると、セル参照や計算結果を一度受け取ってから使えるので、式や参照を何度も書かずに済みます。
Ifは「この条件ならこうする」という判断の道具なので、まずは条件を日本語で言える形にしてから書くとミスが減ります。
For Nextは「同じ形の処理を並べないための道具」なので、行や列を順番に見たいときに最初に候補になります。
迷ったときは「値を覚える必要があるか」「条件で分けたいか」「回数分の処理か」を順番に考えると整理できます。
次に覚えると便利な構文(Select Case / Do Loop などの予告)
Ifが増えすぎる場合はSelect Caseが読みやすいことがあります。
Select Caseは、同じ変数の値で分岐する場面に強く、条件が横に並ぶので全体像が見えやすいです。
回数が決まらない繰り返しにはDo Loopが向いています。
Do Loopは「条件を満たすまで繰り返す」ことが得意なので、空白行まで処理するなど実務っぽい作業で使います。
次に進むときは「分岐の読みやすさ」と「繰り返しの種類」を増やす意識で学ぶと、書けるコードが一気に広がります。