下記のサンプルプログラムは、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