構造化プログラミング7つ道具: エクセルマクロで必要なのは「これだけ」

構造化プログラミング7つ道具

構造化プログラミング7つ道具

ソースコード公開します。

前回のメルマガで、「売上換算で2,000万円相当の価値のあるエクセルマクロをたった50分のオンラインコンサルの場で仕上げた」という話をしました。

「年あたり80万円を節約できるエクセルマクロ」には「2,000万円の売上」以上の価値がある
https://forum.pc5bai.com/article/real-value-of-smart-workflows/

今回、そのソースコードをまるまる公開します。

以下が、コンサルの場で受講生さんに解説しながら書いたコード。数十分の作業でした。

Sub shukei()
    Dim wFm As Worksheet
    Dim wTo As Worksheet
    Dim iFm As Long
    Dim iTo As Long
    Dim gokei As Long

Set wFm = Worksheets("Sheet1")
Set wTo = Worksheets("Sheet2")

wFm.Range("A1").CurrentRegion.Sort _
    key1:=wFm.Range("A1"), _
    key2:=wFm.Range("F1"), _
    Header:=xlYes

iTo = 2
For iFm = 2 To wFm.Range("A" & wFm.Rows.Count).End(xlUp).Row
    If wFm.Range("A" & iFm - 1).Value <> wFm.Range("A" & iFm).Value _
        Or wFm.Range("F" & iFm - 1).Value <> wFm.Range("F" & iFm).Value Then
        If iFm > 2 Then
            wTo.Range("A" & iTo).Value = wFm.Range("A" & iFm - 1).Value
            wTo.Range("B" & iTo).Value = wFm.Range("F" & iFm - 1).Value
            wTo.Range("C" & iTo).Value = gokei
            iTo = iTo + 1
            gokei = 0
        End If
    End If
    gokei = gokei + wFm.Range("G" & iFm).Value
Next
wTo.Range("A" & iTo).Value = wFm.Range("A" & wFm.Rows.Count).End(xlUp).Value
wTo.Range("B" & iTo).Value = wFm.Range("F" & wFm.Rows.Count).End(xlUp).Value
wTo.Range("C" & iTo).Value = gokei

End Sub

Sub tenki_main() Dim bFm As Workbook Dim bTo As Workbook Dim wFm As Worksheet Dim wTo As Worksheet Dim iFm As Long Dim iTo As Long Dim datestring As String Dim dt As Date

Set bFm = Workbooks.Open(ThisWorkbook.Path & "\20250627.xls")
Set bTo = ThisWorkbook
Set wFm = bFm.Worksheets("仕入済")
Set wTo = bTo.Worksheets("Sheet1")

iTo = 2
For iFm = 2 To wFm.Range("A" & wFm.Rows.Count).End(xlUp).Row
    On Error Resume Next
    Select Case Int(wFm.Range("B" & iFm).Value)
        Case 0, 10
            wTo.Range("A" & iTo).Value = wFm.Range("A" & iFm).Value
            datestring = wFm.Range("E" & iFm).Value
            wTo.Range("B" & iTo).Value = datestring
            dt = CDate(Left(datestring, 4) & "/" & Mid(datestring, 5, 2) & "/" & Right(datestring, 2))
            wTo.Range("C" & iTo).Value = dt

            If Day(dt) > 20 Then
                dt = DateAdd("m", 1, dt)
            End If
            wTo.Range("D" & iTo).Value = Year(dt)
            wTo.Range("E" & iTo).Value = Month(dt)
            wTo.Range("F" & iTo).Value = Format(dt, "yyyymm")
            wTo.Range("G" & iTo).Value = wFm.Range("P" & iFm).Value
            iTo = iTo + 1
    End Select
    If Err Then
        Debug.Print iFm, Err.Number
    End If
    On Error GoTo 0
Next
bFm.Close

End Sub


これだけで、「2,000万円の売上相当」の業務改善です。

とはいえ、正直、僕にとっては、「この手の仕事があると毎度まいど書いているプログラム」のアレンジでしかありません。
昨日は豚ひき肉カレー。今日は魚介カレー。そのくらいの違い。

実は、「あるパターン」をすべてマスターすると、上記くらいのものらスラスラ書けるようになります。というか、上記のものくらいスラスラ書けるようになれば、たいていのマクロはスラスラ書けるようになります。

では、その「あるパターン」とは?「構造化プログラミング7つ道具」と僕が読んでいる以下です。

  1. カウント・合計
  2. カウンター初期化
  3. 条件に一致したら転記
  4. ループの中で初期化
  5. ループの中で最初の条件分岐だけ転記処理をスキップ
  6. ループを抜けた直後に終了処理
  7. ループの前後で準備・回復

さきほど紹介したプログラムにも、上記がすべて含まれています。

エクセルマクロ講座「発展編1」の総合演習として、上記をすべて組み合わせた演習を提供しています。この演習をスラスラできるようになればエクセルマクロ有段者です。

発展編1 総合演習「伝票作成マクロ」を作ってみよう
https://forum.pc5bai.com/lesson/course/26/

実際、上記のコードの件をFacebookに投稿したら、さっそく受講生さんからこんな反応が:

お久しぶりです! 懐かしいです、
伝票作成マクロの考え方。これだけで似たものは全て解決できますよね😊

構造化プログラミング7つ道具への受講生さんからの反応

構造化プログラミング7つ道具への受講生さんからの反応

ということなので、エクセルマクロって難しそうですけど、実は、少し練習すれば「いつものパターン...またこのパターンか...」と思いながら粛々とコードを書いてるだけで結果を出せるようになります。

はじめての方は、以下の「エクセルマクロ基礎編+演習セット」がおすすめです。

エクセルマクロ基礎編+演習セット
https://forum.pc5bai.com/lesson/course_set/vba-basic-with-exercises/

さきほどご紹介したマクロレベルのものをスラスラ書けるようになりたいという方は...以下がおすすめ。

エクセルマクロ基礎編+発展編1+演習セット
https://forum.pc5bai.com/lesson/course_set/vba-basic-hatten1-with-exercises/

あとは、オトクな定額コース。僕のライブコンサルを受けられます。
https://forum.pc5bai.com/subscription/index/

オンラインライブコンサルを受けるには?

僕のオンラインライブコンサルを受けられるのは、法人クライアントさん以外では、以下のみなさんだけです。

  • Pythonウェブプログラミングゼミ修了生
  • Pythonデータ分析ゼミ生
  • 定額コース参加者

エクセルのことでもPythonのことでも、なんでも相談可能です。
IT系以外のことでのご相談も。
単なる「スキルアップ」とか「エクセルのここをこうしてほしい」とか、そういうことを超えた視点からの助言をします。

あらゆる相談に対して鮮やかに回答できるとは言いませんが...「どんな相談ならできそうか?」というところは、以下の僕のプロフィールよりご確認ください。
https://forum.pc5bai.com/company/#ogawaprofile

Pythonデータ分析ゼミ生は以下より説明会への優先案内を受け付けています。AIフル活用で最短・最速で学習します。
7月-8月の説明会日程をご案内しています。お急ぎください。
https://forum.pc5bai.com/toiawase/request/python-data-priority-invitation/

定額コースは以下より参加を受け付けています(最近受付再開しました)。
https://forum.pc5bai.com/subscription/index/

今回のメルマガへのフィードバックがあればこちらへぜひお願いします。
https://forum.pc5bai.com/news/feedback/structure-7/

公開日時: 2025/07/17 17:30