(1)全体制御 | ①「全体前処理」を行なう。 ②「全体主処理」を全ての行が完了するまで繰り返して行なう。 ③「全体後処理」を行なう。 |
(2)全体前処理 | ①処理最大行数を取得する。 ②総合計を初期化する。 ③先頭の行カウンタをセットする。 |
(3)全体主処理 | ①「部門前処理」を行なう。 ②「部門主処理」を部門がブレークする(変わる)まで繰り返して行なう。 ③「部門後処理」を行なう。 |
(4)全体後処理 | ①総合計をセットする。 |
(5)部門前処理 | ①部門合計を初期化する。 ②現在の部門をブレーク判断用変数に取得する。 |
(6)部門主処理 | ①「大分類前処理」を行なう。 ②「大分類主処理」を大分類がブレークする(変わる)まで繰り返して行なう。 ③「大分類後処理」を行なう。 |
(7)部門後処理 | ①合計をセットする行を挿入する。 ②部門合計をセットする。 ③部門合計を総合計に加算する。 |
(8)大分類前処理 | ①大分類合計を初期化する。 ②現在の大分類をブレーク判断用変数に取得する。 |
(9)大分類主処理 | ①「小分類前処理」を行なう。 ②「小分類主処理」を小分類がブレークする(変わる)まで繰り返して行なう。 ③「小分類後処理」を行なう。 |
(10)大分類後処理 | ①合計をセットする行を挿入する。 ②大分類合計をセットする。 ③大分類合計を部門合計に加算する。 |
(11)小分類前処理 | ①小分類合計を初期化する。 ②現在の小分類をブレーク判断用変数に取得する。 |
(12)小分類主処理 | ①明細行の金額を小分類合計に加算する。 ②行カウンタを加算する。 |
(13)小分類後処理 | ①合計をセットする行を挿入する。 ②小分類合計をセットする。 ③小分類合計を大分類合計に加算する。 |
'***************************************************************************************************
' 多分類合計を算出するサンプル① Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/06/14(1.00)新規作成
'16/11/19(1.10)*.xlsm化の変更
'20/02/17(1.20)コード整理、標準化準拠作業
'***************************************************************************************************
Option Explicit
'===================================================================================================
Private g_lngRow As Long ' 現在行
Private g_lngRow1 As Long ' 部門先頭行
Private g_lngRow2 As Long ' 大分類先頭行
Private g_lngRow3 As Long ' 小分類先頭行
Private g_lngRowMax As Long ' 最終行
Private g_lngGokei0 As Long ' 総合計
Private g_lngGokei1 As Long ' 部門合計
Private g_lngGokei2 As Long ' 大分類合計
Private g_lngGokei3 As Long ' 小分類合計
'***************************************************************************************************
' ■■■ 起動処理 ■■■
'***************************************************************************************************
'* 処理名 :全体制御
'* 機能 :(1)全体制御
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub 全体制御()
'-----------------------------------------------------------------------------------------------
' (2)全体前処理
Call 全体前処理
' 全部の行を繰り返す
Do While g_lngRow <= g_lngRowMax
' (3)全体主処理
Call 全体主処理
Loop
' (4)全体後処理
Call 全体後処理
End Sub
'***************************************************************************************************
' ■■■ サブ処理(Private) ■■■
'***************************************************************************************************
'* 処理名 :全体前処理
'* 機能 :(2)全体前処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 全体前処理()
'-----------------------------------------------------------------------------------------------
g_lngRowMax = Range("$A$" & Rows.Count).End(xlUp).Row ' 最大行数の取得(A列)
g_lngGokei0 = 0 ' 総合計クリア
g_lngRow = 2 ' 先頭行のセット
End Sub
'***************************************************************************************************
'* 処理名 :全体主処理
'* 機能 :(3)全体主処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 全体主処理()
'-----------------------------------------------------------------------------------------------
' (5)部門前処理
Call 部門前処理
' 部門ブレークまで繰り返す
Do While Cells(g_lngRow, 1).Value = Cells(g_lngRow1, 1).Value
' (6)部門主処理
Call 部門主処理
Loop
' (7)部門後処理
Call 部門後処理
End Sub
'***************************************************************************************************
'* 処理名 :全体後処理
'* 機能 :(4)全体後処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 全体後処理()
'-----------------------------------------------------------------------------------------------
Cells(g_lngRow, 1).Value = "■総合計"
Cells(g_lngRow, 4).Value = g_lngGokei0 ' 合計を表示
End Sub
'***************************************************************************************************
'* 処理名 :部門前処理
'* 機能 :(5)部門前処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 部門前処理()
'-----------------------------------------------------------------------------------------------
g_lngGokei1 = 0 ' 部門計クリア
g_lngRow1 = g_lngRow ' 先頭行のセット
End Sub
'***************************************************************************************************
'* 処理名 :部門主処理
'* 機能 :(6)部門主処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 部門主処理()
'-----------------------------------------------------------------------------------------------
' (8)大分類前処理
Call 大分類前処理
' 部門、大分類ブレークまで繰り返す
Do While ((Cells(g_lngRow, 1).Value = Cells(g_lngRow2, 1).Value) And _
(Cells(g_lngRow, 2).Value = Cells(g_lngRow2, 2).Value))
' (9)大分類主処理
Call 大分類主処理
Loop
' (10)大分類後処理
Call 大分類後処理
End Sub
'***************************************************************************************************
'* 処理名 :部門後処理
'* 機能 :(7)部門後処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 部門後処理()
'-----------------------------------------------------------------------------------------------
Rows(g_lngRow).Insert ' 合計行を挿入
Cells(g_lngRow, 1).Value = "■部門計"
Cells(g_lngRow, 4).Value = g_lngGokei1 ' 合計を表示
g_lngGokei0 = g_lngGokei0 + g_lngGokei1 ' 総合計に加算
g_lngRowMax = g_lngRowMax + 1 ' 挿入行対応
g_lngRow = g_lngRow + 1 ' 挿入行対応
End Sub
'***************************************************************************************************
'* 処理名 :大分類前処理
'* 機能 :(8)大分類前処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 大分類前処理()
'-----------------------------------------------------------------------------------------------
g_lngGokei2 = 0 ' 大分類計クリア
g_lngRow2 = g_lngRow ' 先頭行のセット
End Sub
'***************************************************************************************************
'* 処理名 :大分類主処理
'* 機能 :(9)大分類主処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 大分類主処理()
'-----------------------------------------------------------------------------------------------
' (11)小分類前処理
Call 小分類前処理
' 部門、大分類、小分類ブレークまで繰り返す
Do While ((Cells(g_lngRow, 1).Value = Cells(g_lngRow3, 1).Value) And _
(Cells(g_lngRow, 2).Value = Cells(g_lngRow3, 2).Value) And _
(Cells(g_lngRow, 3).Value = Cells(g_lngRow3, 3).Value))
' (12)小分類主処理
Call 小分類主処理
Loop
' (13)小分類後処理
Call 小分類後処理
End Sub
'***************************************************************************************************
'* 処理名 :大分類後処理
'* 機能 :(10)大分類後処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 大分類後処理()
'-----------------------------------------------------------------------------------------------
Rows(g_lngRow).Insert ' 合計行を挿入
Cells(g_lngRow, 2).Value = "■大分類計"
Cells(g_lngRow, 4).Value = g_lngGokei2 ' 合計を表示
g_lngGokei1 = g_lngGokei1 + g_lngGokei2 ' 部門合計に加算
g_lngRowMax = g_lngRowMax + 1 ' 挿入行対応
g_lngRow = g_lngRow + 1 ' 挿入行対応
End Sub
'***************************************************************************************************
'* 処理名 :小分類前処理
'* 機能 :(11)小分類前処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 小分類前処理()
'-----------------------------------------------------------------------------------------------
g_lngGokei3 = 0 ' 小分類計クリア
g_lngRow3 = g_lngRow ' 先頭行のセット
End Sub
'***************************************************************************************************
'* 処理名 :小分類主処理
'* 機能 :(12)小分類主処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 小分類主処理()
'-----------------------------------------------------------------------------------------------
g_lngGokei3 = g_lngGokei3 + Cells(g_lngRow, 4).Value ' 明細金額を小分類に加算
g_lngRow = g_lngRow + 1 ' 行インデックスを加算
End Sub
'***************************************************************************************************
'* 処理名 :小分類後処理
'* 機能 :(13)小分類後処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub 小分類後処理()
'-----------------------------------------------------------------------------------------------
Rows(g_lngRow).Insert ' 合計行を挿入
Cells(g_lngRow, 3).Value = "■小分類計"
Cells(g_lngRow, 4).Value = g_lngGokei3 ' 合計を表示
g_lngGokei2 = g_lngGokei2 + g_lngGokei3 ' 大分類合計に加算
g_lngRowMax = g_lngRowMax + 1 ' 挿入行対応
g_lngRow = g_lngRow + 1 ' 挿入行対応
End Sub
'------------------------------------------<< End of Source >>--------------------------------------
'***************************************************************************************************
' 多分類合計を算出するサンプル② Module2(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/06/14(1.00)新規作成
'16/11/19(1.10)*.xlsm化の変更
'20/02/17(1.20)コード整理、標準化準拠作業
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ 起動処理 ■■■
'***************************************************************************************************
'* 処理名 :集計処理
'* 機能 :集計処理
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月14日
'* 作成者 :井上 治
'* 更新日 :2020年02月17日
'* 更新者 :井上 治
'* 機能説明:「(1)全体制御」レベル以下全体を単一プロシージャで記述したもの
'* 注意事項:
'***************************************************************************************************
Sub 集計処理()
'-----------------------------------------------------------------------------------------------
Dim lngRow As Long ' 現在行
Dim lngRow1 As Long ' 部門先頭行
Dim lngRow2 As Long ' 大分類先頭行
Dim lngRow3 As Long ' 小分類先頭行
Dim lngRowMax As Long ' 最終行
Dim lngGokei0 As Long ' 総合計
Dim lngGokei1 As Long ' 部門合計
Dim lngGokei2 As Long ' 大分類合計
Dim lngGokei3 As Long ' 小分類合計
'-------------------------------------------------------------------------------
' (2)全体前処理
lngRowMax = Range("$A$65536").End(xlUp).Row ' 最大行数の取得
lngGokei0 = 0 ' 総合計クリア
lngRow = 2 ' 先頭行のセット
'-------------------------------------------------------------------------------
' (3)全体主処理
Do While lngRow <= lngRowMax
'---------------------------------------------------------------------------
' (5)部門前処理
lngGokei1 = 0 ' 部門計クリア
lngRow1 = lngRow ' 先頭行のセット
'---------------------------------------------------------------------------
' (6)部門主処理
Do While Cells(lngRow, 1).Value = Cells(lngRow1, 1).Value
'-----------------------------------------------------------------------
' (8)大分類前処理
lngGokei2 = 0 ' 大分類計クリア
lngRow2 = lngRow ' 先頭行のセット
'-----------------------------------------------------------------------
' (9)大分類主処理
Do While ((Cells(lngRow, 1).Value = Cells(lngRow2, 1).Value) And _
(Cells(lngRow, 2).Value = Cells(lngRow2, 2).Value))
'-------------------------------------------------------------------
' (11)小分類前処理
lngGokei3 = 0 ' 小分類計クリア
lngRow3 = lngRow ' 先頭行のセット
'-------------------------------------------------------------------
' (12)小分類主処理
Do While ((Cells(lngRow, 1).Value = Cells(lngRow3, 1).Value) And _
(Cells(lngRow, 2).Value = Cells(lngRow3, 2).Value) And _
(Cells(lngRow, 3).Value = Cells(lngRow3, 3).Value))
' 明細金額を小分類に加算
lngGokei3 = lngGokei3 + Cells(lngRow, 4).Value
lngRow = lngRow + 1 ' 行カウンタを加算
Loop
'-------------------------------------------------------------------
' (13)小分類後処理
Rows(lngRow).Insert ' 合計行を挿入
Cells(lngRow, 3).Value = "■小分類計"
Cells(lngRow, 4).Value = lngGokei3 ' 合計を表示
lngGokei2 = lngGokei2 + lngGokei3 ' 大分類合計に加算
lngRowMax = lngRowMax + 1 ' 挿入行対応
lngRow = lngRow + 1 ' 挿入行対応
Loop
'-----------------------------------------------------------------------
' (10)大分類後処理
Rows(lngRow).Insert ' 合計行を挿入
Cells(lngRow, 2).Value = "■大分類計"
Cells(lngRow, 4).Value = lngGokei2 ' 合計を表示
lngGokei1 = lngGokei1 + lngGokei2 ' 部門合計に加算
lngRowMax = lngRowMax + 1 ' 挿入行対応
lngRow = lngRow + 1 ' 挿入行対応
Loop
'---------------------------------------------------------------------------
' (7)部門後処理
Rows(lngRow).Insert ' 合計行を挿入
Cells(lngRow, 1).Value = "■部門計"
Cells(lngRow, 4).Value = lngGokei1 ' 合計を表示
lngGokei0 = lngGokei0 + lngGokei1 ' 総合計に加算
lngRowMax = lngRowMax + 1 ' 挿入行対応
lngRow = lngRow + 1 ' 挿入行対応
Loop
'-------------------------------------------------------------------------------
' (4)全体後処理
Cells(lngRow, 1).Value = "■総合計"
Cells(lngRow, 4).Value = lngGokei0 ' 合計を表示
End Sub
'------------------------------------------<< End of Source >>--------------------------------------