はじめに:なぜこの2つが重要なのか?
前回の第2回では、セルに文字を入れたり、シートを操作したりする方法を学びました。しかし、それだけでは「手作業の代わり」にはなっても、「自動化」とは言えません。
真の自動化を実現するために必要なのが、今回学ぶ**「条件分岐(判断)」と「ループ処理(繰り返し)」**です。
- 条件分岐(If):「もし赤字なら文字を赤くする」「もし値が空白なら処理を飛ばす」という人間の判断を代行する機能。
- ループ処理(For):「1行目から1000行目まで同じことをやる」という単純作業を代行する機能。
この2つを組み合わせれば、「1000件のデータを見て(ループ)、条件に合うものだけを転記する(条件分岐)」という、実務で最もよく使う処理が作れるようになります。焦らずじっくり学んでいきましょう。
1. 条件分岐(If文):プログラムに「判断力」を与える
条件分岐とは、**「もし~なら、〇〇する。そうでなければ、××する」**という命令のことです。VBAではIf(イフ)文を使います。
基本の書き方
まずは最もシンプルな形です。「もし(If)、A1セルの値が100以上なら(Then)、メッセージを出す」というコードを見てみましょう。
VBA
ポイント:
If 条件 Thenで始まり、End Ifで終わります。このセットは必須です。- その間に書かれたコードは、条件が合ったときだけ実行されます。
「そうでなければ」を追加する(Else)
条件に合わなかった場合の処理も追加したいときは、Else(エルス)を使います。
VBA
3つ以上の分岐(ElseIf)
「80点以上はA、60点以上はB、それ以外はC」のように段階的に分けたい場合は、ElseIfを使います。
VBA
- 注意:条件は上から順に判定されます。最初に合致したところで処理が実行され、以降のElseIfは無視されます。
覚えておきたい「比較演算子」
条件を指定するときに使う記号です。特に「等しくない」や「以上・以下」の書き方に注意しましょう。
| 記号 | 意味 | 例 |
= | 等しい | If A = B Then |
<> | 等しくない | If A <> "" Then (Aが空白でなければ) |
> | より大きい | If A > 100 Then (100は含まない) |
>= | 以上 | If A >= 100 Then (100を含む) |
< | より小さい | If A < 100 Then |
<= | 以下 | If A <= 100 Then |
Google スプレッドシートにエクスポート
もう一つの分岐:Select Case文
条件分岐の条件が「特定の変数の値」である場合(例:「部署名」が営業か、人事か、開発か…など)、If文で書くと長くなってしまいます。そんなときはSelect Case文が便利です。
VBA
2. ループ処理(For文):プログラムに「忍耐力」を与える
ループ処理を使えば、Excelの行を上から下まで順番に処理するような作業を一瞬で終わらせることができます。
最も基本:For…Next文
**「回数が決まっている繰り返し」**に使います。 特に重要なのが、変数i(カウンター変数)の使い方です。
VBA
このコードの動きを実況解説
- 開始:
iに1が入ります。 Cells(1, 1)(つまりA1セル)に「1回目の処理」と書き込みます。Next iに到達すると、iが1増えて2になり、上に戻ります。Cells(2, 1)(A2セル)に「2回目の処理」と書き込みます。- これを繰り返し、
iが10の処理が終わったらループを抜けます。
これが「行ごとの処理」の正体です。 i という変数が1つずつ増える性質を利用して、処理する行をずらしているのです。
データがある最後まで繰り返すテクニック
実務では「10回」と決まっていることより、「データが入っている最終行まで」処理したいことのほうが多いでしょう。 その場合、第2回で学んだ「最終行の取得」と組み合わせます。
VBA
コレクションのループ:For Each文
「ブック内の全シート」や「指定した範囲の全セル」など、**「ひとかたまりのグループ(コレクション)」**の中身を順番に取り出すループです。回数を気にする必要がないので便利です。
VBA
3. 実践演習:条件分岐とループの組み合わせ
ここまでの知識を総動員して、実務で使えるマクロを作ってみましょう。
課題:未提出者をあぶり出す
シナリオ: B列に「氏名」、C列に「提出状況」が入力された名簿があります。 C列が「未提出」の人を見つけたら、D列に「督促」と書き込み、さらにその行を黄色に塗りつぶします。
ステップ1:日本語でロジックを考える
いきなりコードを書かず、手順を整理しましょう。
- データの最終行を調べる。
- 2行目から最終行まで、1行ずつ以下のチェックをする。
- もし C列の値が「未提出」なら、
- D列に「督促」と書く。
- その行の背景色を黄色にする。
- 次の行へ進む。
ステップ2:コードにする
VBA
このコードをコピーして実行してみてください。一瞬で「判断」と「処理」が終わる快感を味わえるはずです。
4. 初心者がハマりやすいポイント(エラー回避)
1. 「End If」や「Next」を忘れる
If文を書き始めたらすぐにEnd Ifを、For文を書いたらすぐにNextを書いて、枠を作ってから中身を書く癖をつけるとエラーが減ります。
2. インデント(字下げ)をしない
上記のコード例を見てください。Ifの中身やForの中身は、Tabキーで少し右にずらしています(インデント)。 これをしないと、どこからどこまでがループなのか分からなくなります。インデントはマナーであり、バグを防ぐ命綱です。
3. 無限ループ
Do...Loop文(条件を満たすまで繰り返す)を使う場合、終了条件が永遠に来ないコードを書くとExcelが固まります。 初心者のうちは、回数が明確なFor...Next文を使うことをおすすめします。もし固まったらキーボードの Esc キーまたは Ctrl + Break キーを連打して停止させてください。
まとめと次回予告
今回は、VBAの「脳」にあたる条件分岐と、「筋肉」にあたるループ処理を学びました。
- If文:状況によって処理を分ける。
- For文:行番号を変数
iにして、上から順に処理する。 - 組み合わせ:全データを走査して、条件に合うものだけ処理する。
これができれば、Excel業務の自動化における「基礎」は卒業です!
次回(第4回)の予告
次回は、さらに一歩進んだテクニックとして、**「ユーザーフォーム(入力画面)」**の作成に挑戦します。 「ボタンを押すと専用の入力画面が出てきて、データを入力しやすくする」という、本格的なアプリのような機能を作ってみましょう。
- ユーザーフォームの作り方
- テキストボックスやボタンの配置
- 入力されたデータをシートに転記する
次回もお楽しみに!
関連記事