Excel VBAの基本文法を完全攻略!変数・条件分岐・ループを初心者向けに徹底解説
生徒
「エクセルマクロの勉強を始めたのですが、英語の呪文みたいなのがたくさん出てきて、どこから手を付ければいいか分かりません…。」
先生
「大丈夫ですよ。VBAには『三大基本文法』というものがあります。それは、データを入れる『変数』、分かれ道を作る『条件分岐』、そして同じことを繰り返す『ループ』です。」
生徒
「その3つさえ覚えれば、マクロが作れるようになるんですか?」
先生
「はい!この3つはプログラムの土台です。料理でいえば、包丁の使い方、火加減、味付けを覚えるようなものですね。それでは詳しく解説していきます!」
1. データの入れ物「変数」の基本と使い方
プログラミングの世界では、数字や文字などのデータを一時的に保管しておく「箱」のようなものを使います。この箱のことを変数(へんすう)と呼びます。
なぜ箱が必要なのでしょうか?例えば、計算の途中の数字を覚えておいたり、何度も使う長い名前を短い名前で使い回したりするためです。VBAで変数を使うときは、「今から箱を使いますよ!」という宣言をするのがルールです。
Sub VariableExample()
' Dim(ディム)は変数の宣言。「箱を用意する」という意味です
Dim userName As String
Dim userAge As Integer
' 箱の中にデータを入れる(代入といいます)
userName = "田中太郎"
userAge = 25
' メッセージボックスで表示する
MsgBox userName & "さんの年齢は" & userAge & "歳です。"
End Sub
ここで出てきた String(ストリング)は「文字列」、Integer(インテジャー)は「整数」という意味の型(かた)です。箱の種類を指定することで、間違えて数字の箱に文字を入れようとしたときに、エクセルが教えてくれるようになります。
2. もしも〜だったら?を叶える「If文」による条件分岐
次に覚えるのは、状況に合わせて動きを変える方法です。これを条件分岐(じょうけんぶんき)といいます。VBAでは If(イフ)文を使います。
例えば、「点数が80点以上なら合格、そうでなければ不合格」という処理を考えてみましょう。
Sub IfExample()
Dim score As Integer
score = 85
' もしスコアが80以上なら
If score >= 80 Then
MsgBox "おめでとう!合格です。"
' そうでなければ
Else
MsgBox "残念、不合格です。次は頑張りましょう。"
End If
End Sub
Then は「その時」、Else は「それ以外」という意味です。最後に必ず End If と書いて、「ここで条件分岐はおわりです」と伝えてあげるのがポイントです。
3. 繰り返し作業を自動化する「For Next」ループ
エクセルマクロの真骨頂は、何百回、何千回という同じ作業を一瞬で終わらせることです。この繰り返しの仕組みをループといいます。
代表的なのが For Next(フォー・ネクスト)文です。指定した回数だけ、中の処理をぐるぐる回します。
Sub ForNextExample()
Dim i As Integer
' 1から5まで繰り返す
For i = 1 To 5
' セルのi行目、1列目に文字を入れる
Cells(i, 1).Value = i & "行目の処理完了"
Next i
End Sub
この i はカウンターのような役割をします。1回目は1、2回目は2…と増えていき、5まで終わるとループを抜けます。100回繰り返したいなら 1 To 100 と変えるだけ。手作業では何分もかかることが、1秒もかからずに終わります。
4. 特定の条件まで繰り返す「Do Loop」文
「何回繰り返すか決まっていないけれど、空白のセルが出てくるまで続けたい」という時に便利なのが、Do Loop(ドゥー・ループ)文です。
条件が満たされている間(または満たされるまで)、ずっと処理を続けます。
Sub DoLoopExample()
Dim i As Integer
i = 1
' セルが空白("")ではない間、ずっと繰り返す
Do While Cells(i, 1).Value <> ""
' 文字を赤色にする
Cells(i, 1).Font.Color = vbRed
' 次の行へ行くためにiを増やす
i = i + 1
Loop
End Sub
While(ホワイル)は「〜の間ずっと」という意味です。注意点は、i = i + 1 のように、条件を終わらせるための記述を忘れないことです。これを忘れると「無限ループ」といって、エクセルが止まらなくなってしまうので気をつけましょう。
5. 比較演算子と論理演算子を使いこなそう
条件分岐やループを使うときに欠かせないのが、大きさを比べたり、複数の条件を組み合わせたりする記号です。
比較演算子
=(等しい)<>(等しくない)>(より大きい)<(より小さい)>=(以上)<=(以下)
論理演算子
And(かつ:両方満たす)Or(または:どちらか満たす)Not(〜ではない)
これらを組み合わせることで、「年齢が20歳以上、かつ、性別が女性」といった複雑な条件も作れるようになります。
6. インデント(字下げ)で読みやすいコードを書く
プログラムは、コンピューターが動けばいいだけでなく、人間が読んで理解しやすいことも非常に大切です。そこで使われるのがインデント(字下げ)です。
If や For の中身をキーボードの「Tab(タブ)」キーで一段下げることで、どこからどこまでがループや条件の範囲なのかがパッと見て分かるようになります。
' 見にくいコード(字下げなし)
Sub BadExample()
If Range("A1").Value = "OK" Then
MsgBox "完了です"
End If
End Sub
' 読みやすいコード(字下げあり)
Sub GoodExample()
If Range("A1").Value = "OK" Then
MsgBox "完了です"
End If
End Sub
プログラミング未経験の方は後回しにしがちですが、実はこれが一番の上達のコツです。コードがきれいに整理されていると、ミス(バグ)にも気づきやすくなりますよ。
7. 実践練習:変数・条件分岐・ループの組み合わせ
最後に、今回学んだ3つの文法をすべて使ったプログラムを作ってみましょう。A列にある1行目から10行目までの数字を確認し、50点以上ならB列に「合格」、それ以外なら「不合格」と書き込み、最後に合計点を計算するマクロです。
Sub TotalPractice()
Dim i As Integer
Dim totalScore As Integer
totalScore = 0
' ループ開始
For i = 1 To 10
' もしセルが50以上なら(条件分岐)
If Cells(i, 1).Value >= 50 Then
Cells(i, 2).Value = "合格"
Else
Cells(i, 2).Value = "不合格"
End If
' スコアを足していく(変数の活用)
totalScore = totalScore + Cells(i, 1).Value
Next i
MsgBox "10名分の集計が終わりました。合計点は " & totalScore & " 点です。"
End Sub
いかがでしょうか。たったこれだけのコードで、何人分のデータであっても一瞬で判定して集計できるようになります。これがエクセルVBAの魔法です。
8. エラーを恐れずにたくさん書くことが上達の近道
プログラムを動かそうとして、赤い文字でエラーメッセージが出てくると、びっくりして「壊してしまったかも!」と不安になるかもしれません。でも安心してください。パソコンが壊れることは絶対にありません。
エラーは「書き方が少し違うよ」というエクセルからのアドバイスです。まずは、今回紹介したコードをそのまま書き写して(写経といいます)動かしてみることから始めましょう。自分で文字を変えてみたり、回数を変えてみたりして、どう動くか試すことで知識が定着します。
変数の箱を用意し、Ifで分かれ道を作り、ForやDoで繰り返す。この基本のリズムさえ掴んでしまえば、どんなに複雑に見えるマクロも読み解けるようになります。