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で繰り返す。この基本のリズムさえ掴んでしまえば、どんなに複雑に見えるマクロも読み解けるようになります。
まとめ
今回は、Excel VBAの基本文法である「変数」「条件分岐(If文)」「ループ(For Next / Do Loop)」について、初心者の方でも理解しやすいように丁寧に解説してきました。これらはエクセルマクロを作成するうえで欠かせない基礎中の基礎であり、この三つをしっかり身につけることで、業務効率化や自動化の第一歩を踏み出すことができます。 まず「変数」は、データを一時的に保管するための箱のような役割を持ちます。数値や文字列を扱う際に必須の考え方であり、Dimで宣言し、型を指定することで安全にデータを扱うことができるようになります。VBA初心者の方は、まずはStringやIntegerといった基本的な型から覚えていくと理解がスムーズです。 次に「条件分岐」は、処理の流れを分けるための重要な仕組みです。If文を使うことで、「もし〜だったら」という条件に応じた処理を簡単に実現できます。業務でよくある「条件によって処理を変える」場面では必須のテクニックとなります。ElseやElseIfを活用することで、より複雑なロジックにも対応可能です。 そして「ループ処理」は、同じ作業を繰り返すための強力な機能です。For Next文は回数が決まっている場合に、Do Loop文は条件に応じて繰り返す場合に使われます。エクセルの大量データを一括処理する際には欠かせない存在であり、手作業では時間がかかる作業も一瞬で終わらせることができます。 また、比較演算子や論理演算子を組み合わせることで、より実践的な条件設定が可能になります。「以上」「以下」「かつ」「または」といった条件を自由に組み合わせることで、実務に即した柔軟なマクロを作ることができます。 さらに、インデント(字下げ)を意識することで、コードの可読性が大きく向上します。これはプログラミング初心者ほど軽視しがちですが、後から見返したときの理解しやすさや、バグの発見のしやすさに直結する重要なポイントです。 最後に紹介したサンプルプログラムのように、変数・条件分岐・ループを組み合わせることで、実務で使える実践的なマクロを作ることができます。最初は難しく感じるかもしれませんが、繰り返し書いて試すことで必ず身につきます。エラーを恐れず、少しずつでもコードを書く習慣をつけることが上達への近道です。 Excel VBAは、日々の業務を効率化し、作業時間を大幅に削減できる強力なツールです。今回学んだ基本文法を土台として、より高度な処理や自動化にチャレンジしていきましょう。
サンプルプログラム(復習用)
Sub ReviewPractice()
Dim i As Integer
Dim total As Integer
total = 0
For i = 1 To 5
If Cells(i, 1).Value >= 60 Then
Cells(i, 2).Value = "合格"
Else
Cells(i, 2).Value = "不合格"
End If
total = total + Cells(i, 1).Value
Next i
MsgBox "合計点は " & total & " 点です。"
End Sub
実行結果イメージ
合計点は 350 点です。
生徒
「最初は難しそうに感じていましたが、変数・条件分岐・ループの役割が分かってきました!」
先生
「いいですね。その三つはVBAの基礎であり、すべてのマクロの土台になります。」
生徒
「特にループ処理は便利ですね。繰り返し作業が一瞬で終わるのは驚きました。」
先生
「そうですね。業務効率化の鍵になるのがループです。そこに条件分岐を組み合わせることで、実務に役立つ処理が作れます。」
生徒
「エラーが出るのが怖かったですが、気にせず試していいと分かって安心しました。」
先生
「エラーは成長のチャンスです。たくさん書いて試すことが、最短で上達する方法ですよ。」
生徒
「これからは、自分でも簡単なマクロを作ってみます!」
先生
「その意気です。今回の基本をしっかり復習して、少しずつステップアップしていきましょう。」