構造化プログラミング7つ道具: エクセルマクロで必要なのは「これだけ」
構造化プログラミング7つ道具
ソースコード公開します。
前回のメルマガで、「売上換算で2,000万円相当の価値のあるエクセルマクロをたった50分のオンラインコンサルの場で仕上げた」という話をしました。
今回、そのソースコードをまるまる公開します。
以下が、コンサルの場で受講生さんに解説しながら書いたコード。数十分の作業でした。
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」の総合演習として、上記をすべて組み合わせた演習を提供しています。この演習をスラスラできるようになればエクセルマクロ有段者です。
発展編1 総合演習「伝票作成マクロ」を作ってみよう
https://forum.pc5bai.com/lesson/course/26/
実際、上記のコードの件をFacebookに投稿したら、さっそく受講生さんからこんな反応が:
お久しぶりです! 懐かしいです、
伝票作成マクロの考え方。これだけで似たものは全て解決できますよね😊
構造化プログラミング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月18日 08:10
AIユーザさん
2025年07月04日 18:56
小川 慶一さん
2025年07月04日 18:46
AIユーザさん
2025年06月12日 15:34
小川 慶一さん
2025年06月12日 15:17
AIユーザさん