下記のサンプルプログラムは、EXCELのデータに対してユーザーが指定した選択範囲で集計を行うサンプルプログラムです。ある条件による集計では無く、自由に集計箇所を選択して集計する事ができます。
なお、今回のプログラムは、集計区分として「小計」・「中計」・「合計」3つの集計区分を用意してユーザーがどの範囲で集計するのかを自在に指定する事ができます。
詳しくは、下図を参照して下さい。
※注意:下記のプログラムは、シート名を指定しているので、必ず「月次データ”」を入力、かつデータの最終行判断として、集計区分の「合計」列の最終列に「●」を入力して下さい。
Sub 指定合計計算()
Dim ws01 As Worksheet
Dim I, S_Sum, M_Sum, L_Sum, mRow As Long
Set ws01 = Worksheets("月次データ") 'シート名「月次データ」を指定
mRow = ws01.Cells(Rows.Count, "E").End(xlUp).Row 'E列の最終行取得(合計)
ws01.Range("A5:J" & mRow).Borders.Weight = xlHairline '中細線
ws01.Range("A5:J" & mRow).BorderAround Weight:=xlThin '外側細線
S_Sum = 5 '5行名からカウント開始(小計)
M_Sum = 5 '5行名からカウント開始(中計)
L_Sum = 5 '5行名からカウント開始(合計)
For I = 5 To mRow
'---------------------小計(設定)
If ws01.Cells(I, "C") = "●" Then
ws01.Cells(I, "G") = "=SUBTOTAL(9,G" & S_Sum & ":G" & I - 1 & ")"
ws01.Cells(I, "H") = "=SUBTOTAL(9,H" & S_Sum & ":H" & I - 1 & ")"
ws01.Cells(I, "I") = "=SUBTOTAL(9,I" & S_Sum & ":I" & I - 1 & ")"
ws01.Range("A" & I & ":J" & I).BorderAround Weight:=xlThin '外側細線
ws01.Cells(I, "F") = "小計"
S_Sum = I + 1 '小計カウント+1
End If
'--------------------中計(設定)
If ws01.Cells(I, "D") = "●" Then
ws01.Cells(I, "G") = "=SUBTOTAL(9,G" & M_Sum & ":G" & I - 1 & ")"
ws01.Cells(I, "H") = "=SUBTOTAL(9,H" & M_Sum & ":H" & I - 1 & ")"
ws01.Cells(I, "I") = "=SUBTOTAL(9,I" & M_Sum & ":I" & I - 1 & ")"
ws01.Range("A" & I & ":J" & I).BorderAround Weight:=xlThin '外側細線
ws01.Cells(I, "F") = "中計"
M_Sum = I + 1 '小計カウント+1
End If
'-------------------合計(設定)
If ws01.Cells(I, "E") = "●" Then
ws01.Cells(I, "G") = "=SUBTOTAL(9,G" & L_Sum & ":G" & I - 1 & ")"
ws01.Cells(I, "H") = "=SUBTOTAL(9,H" & L_Sum & ":H" & I - 1 & ")"
ws01.Cells(I, "I") = "=SUBTOTAL(9,I" & L_Sum & ":I" & I - 1 & ")"
ws01.Range("A" & I & ":J" & I).BorderAround Weight:=xlThin '外側細線
ws01.Range("A" & mRow & ":J" & mRow).Borders(xlEdgeTop).LineStyle = xlDouble '二重合計線
ws01.Cells(I, "F") = "合計"
L_Sum = I + 1 '合計カウント+1
End If
Next I
'--------------------全ての行間(セル幅)の設定
ws01.Rows("6:" & mRow).RowHeight = 16 '行16サイズに設定
End Sub
Sub 消費税計算()
Dim ws01 As Worksheet
Dim I, mRow As Long
Set ws01 = Worksheets("月次データ")
mRow = ws01.Cells(Rows.Count, "E").End(xlUp).Row 'E列最終行
For I = 5 To mRow '最終行まで繰り返す。
'------------------------------- 請求額
If ws01.Cells(I, "J") = "非" Then
ws01.Cells(I, "M") = 0 '非課税
ws01.Cells(I, "N") = ws01.Cells(I, "L") '合計(非課税)
ElseIf ws01.Cells(I, "J") = "8" Then
On Error Resume Next 'エラーを回避
ws01.Cells(I, "M") = Int(ws01.Cells(I, "L") * 0.08) '消費税(8%)
ws01.Cells(I, "N") = ws01.Cells(I, "L") + ws01.Cells(I, "M") '合計
Else
On Error Resume Next 'エラーを回避
ws01.Cells(I, "M") = Int(ws01.Cells(I, "L") * 0.1) '消費税(10%)
ws01.Cells(I, "N") = ws01.Cells(I, "L") + ws01.Cells(I, "M") '合計
End If
Next I
End Sub