VBAで複雑な処理を組む前にフローチャートで整理する方法|条件分岐・ループ・例外処理の設計手順

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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール