VBAの複雑な処理は、コードを書く前に「流れ図(フローチャート)」で整理すると、ミスが減り実装がスムーズになります。条件分岐・繰り返し・例外処理が絡む場面でも、処理の流れを図に落とすことで「何を・どの順番で・どう分岐するか」が一目でわかるようになります。
この記事では、次の内容を順番に解説します。
- フローチャートで処理を整理する基本の考え方
- フローチャートをVBAコードに変換する手順
- 条件分岐・ループ・例外処理が絡む実践例
- コードを書く前に確認すべき3つのポイント
処理を流れ図で整理するには?
フローチャートは複雑なルールを持つ処理を紙の上で整理するための道具です。専用のソフトがなくても、紙やメモ帳に次のような記号を使って書くだけで十分です。
| 記号(図形) | 意味 | 使う場面 |
|---|---|---|
| 角丸四角(開始・終了) | 処理の始まりと終わり | Sub の開始・End Sub |
| 四角(処理) | 値の代入・セルへの書き込みなど | 通常の処理行 |
| ひし形(分岐) | 条件判断(はい/いいえ) | If・ElseIf |
| 矢印(ループ) | 繰り返しの流れ | For・Do While |
たとえば「売上データをチェックしてB列に結果を出力する」という処理なら、次のような流れ図になります。
▼ 開始
↓
A列を上から1行ずつ確認する(ループ)
↓
セルが空欄?
├─ はい → B列に「未入力」を書き込む
└─ いいえ
↓
金額が100万円超え?
├─ はい → B列に「特別扱い」を書き込む
└─ いいえ → B列に「通常処理」を書き込む
↓
次の行へ(ループ継続)
↓
▼ 終了
図を書くことで「分岐が2段階ある」「ループの中に条件がある」という構造がひと目でわかり、コードの設計がスムーズになります。
流れ図をVBAコードに変換するには?
フローチャートの各ブロックをVBAの構文に対応させると、コードの骨格が自然にできあがります。
| フローチャートの要素 | VBAの構文 |
|---|---|
| 開始・終了 | Sub 〇〇() 〜 End Sub |
| 繰り返し(各行を順に処理) | For i = 2 To 最終行 〜 Next i |
| 条件分岐(はい/いいえ) | If 〜 ElseIf 〜 Else 〜 End If |
| 処理(セルに書き込む) | Cells(i, 2).Value = "〇〇" |
先ほどの流れ図をそのままコードにした例です。
Sub CheckSales()
Dim ws As Worksheet
Dim i As Long
Dim v As Variant
Set ws = ActiveSheet
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
v = ws.Cells(i, 1).Value
If v = "" Then
ws.Cells(i, 2).Value = "未入力"
ElseIf v > 1000000 Then
ws.Cells(i, 2).Value = "特別扱い"
Else
ws.Cells(i, 2).Value = "通常処理"
End If
Next i
MsgBox "チェックが完了しました。"
End Sub
コードの構造が流れ図と1対1で対応しているため、「どの行がどの処理か」が読んですぐわかります。
条件・ループ・例外が絡む処理を整理するには?
実務では「空欄なら飛ばす」「エラーが起きたら記録してスキップする」などの例外処理が加わることがあります。こうした複雑な処理でも、先に流れ図を書いてから実装すると整理しやすくなります。
▼ 開始
↓
A列を上から1行ずつ確認する(ループ)
↓
セルが空欄?
└─ はい → スキップして次の行へ
↓
数値として有効?
└─ いいえ → E列に「入力エラー」と記録して次の行へ
↓
金額が100万円超え?
├─ はい → 「特別扱い」
└─ いいえ → 「通常処理」
↓
▼ 終了
Sub CheckSalesAdvanced()
Dim ws As Worksheet
Dim i As Long
Dim v As Variant
Set ws = ActiveSheet
For i = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
v = ws.Cells(i, 1).Value
'空欄はスキップ
If v = "" Then GoTo NextRow
'数値でなければエラー記録してスキップ
If Not IsNumeric(v) Then
ws.Cells(i, 5).Value = "入力エラー"
GoTo NextRow
End If
'金額による分岐
If v > 1000000 Then
ws.Cells(i, 2).Value = "特別扱い"
Else
ws.Cells(i, 2).Value = "通常処理"
End If
NextRow:
Next i
MsgBox "チェックが完了しました。"
End Sub
「条件を先にふるい落とす」書き方(GoTo NextRow)を使うことで、メインの処理が深くネストせずに読みやすくなっています。
コードを書く前に確認すべきポイントを押さえるには?
流れ図を書いたら、コードに入る前に次の3点を確認する習慣をつけると、後からの手戻りが減ります。
| 確認ポイント | 内容 | 確認方法 |
|---|---|---|
| 分岐の漏れ | すべての条件パターンが網羅されているか | 「もし〇〇だったら?」と例外ケースを考える |
| ループの終了条件 | ループが必ず終わる条件があるか | 無限ループになるパターンがないか確認する |
| 処理の順番 | 条件を確認する順番が正しいか | 「先に確認すべき条件はどれか」を整理する |
特に「分岐の漏れ」は、実装してから気づくと修正コストが大きくなります。流れ図の段階で「空欄のとき」「マイナス値のとき」「想定外の文字列が入ったとき」など、例外パターンを書き出しておくとコードが安定します。
まとめ
- 複雑な処理はコードを書く前に流れ図(フローチャート)で整理すると、構造が見えてミスが減る
- フローチャートの各要素はVBAの構文(For・If・Sub)と1対1で対応している
- 「条件を先にふるい落とす」書き方(
GoToまたはExit Sub)でメイン処理のネストを浅くできる - コードを書く前に分岐の漏れ・ループの終了条件・処理の順番を確認する習慣をつける
- 図を書く時間は短くても、後からの手戻りや修正コストを大幅に減らせる
よくある質問
図を書くのが面倒です。頭の中で考えるだけではダメですか?
短いコードなら頭の中だけでも大丈夫です。ただ、初心者のうちは「頭で考えたこと」と「実際にVBAが動く順番」にズレが生じがちです。図に書き出す作業は、いわば「設計図のセルフチェック」です。一見遠回りに見えますが、エラーが出てから数時間悩むよりも、最初に3分だけ図を書く方が、結果として早く完成します。
GoTo(ゴートゥー)は使わないほうがいいと聞きました
プログラミングの世界では「あちこちにジャンプすると流れが追いづらくなる」という理由で、使いすぎは良くないとされています。ただ、今回のように「エラーや空欄があったら、サッと次の行へ飛ばす」という使い方に限定すれば、初心者の方にはむしろ分かりやすくて便利な命令です。慣れてきたら他の書き方に挑戦するくらいで大丈夫です。
処理の流れが長くなって、図がぐちゃぐちゃになります…
もし図が長くなりすぎたら、「一度に全部やろうとしすぎ」かもしれません。「まずはデータを集める図」「次に計算する図」というように、小さなステップに分けて考えてみましょう。VBAのコードも、役割ごとに「部品」として分けて作ると、あとで修正するのがぐんと楽になります。
どこまで細かく図(手順書)を書けばいいですか?
「自分が迷わずにコードを書けるレベル」でOKです。たとえば「セルの色を薄い青にする」といった細かい操作まで全部書く必要はありません。「どこで繰り返すのか」「どんな条件で分かれるのか」という、大きな交通整理ができれば十分合格点です。まずは「走り書き」から始めてみてください。
コードを書いてから「間違い」に気づくことが多いです
それは、設計図(図)を作る前に「いきなり組み立て」を始めてしまっているからかもしれません。プラモデルも説明書を見ずに作るとパーツが余りますよね。「まず日本語で流れを決める → それからVBAに翻訳する」という順番を守るだけで、やり直しは驚くほど減ります。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



