同じ項目の数値を合計するマクロ-SumIf関数
を示す。
■Excel-VBA 同じ項目の数値を合計するマクロ-SumIf関数
Sub sample20() Dim MR As Long Dim i As Long MR = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To MR Cells(i, 20) = WorksheetFunction.SumIf(Range(Cells(2, 7), Cells(MR, 7)), Cells(i, 7), Range(Cells(2, 8), Cells(i, 8))) Next i Cells(1, 20) = "同じ項目の数値合計" End Sub※[2.~3.] 変数宣言。
※[4.] 最終行数取得。MR格納。
※[5.~7.] 7列目(G列)の同じ項目、8列目(H列)の数値、
20列目(T列)に合計値を入れる。
最終行までFor Nextループ。※[5.~7.] 7列目(G列)の同じ項目、8列目(H列)の数値、
20列目(T列)に合計値を入れる。
※[9.] 20列目(T列)1行目に「同じ項目の数値合計」
列タイトル追加。
■マクロ実行対象
「部品データ_191128.xlsx」の「部品表」シート。■マクロ実行結果
実行すると、20列目(T列)に
7列目(G列)の同じ項目「901」「902」「903」の
8列目(H列)の数値合計が入る。
同じ項目の数値を合計するマクロ-SumIf関数
を示した。
For Nextでセルに逐次アクセスするので
データ数量が十万単位になると、
処理速度のおそさが気になるかもしれない。
その場合はまず配列に値を代入し、
For Nextループ完了後にまとめて
配列数値をセルに入れることで
処理速度がはやくなる。
うまく動作しないので使えなかった。
プログラムでなく、
シートに直接記述するSumIf関数は使用できる。
【参考】T2セルの式は
「=SUMIF($G$2:$G$29,G2,$H$2:$H$29)」
となる。
以上。
7列目(G列)の同じ項目「901」「902」「903」の
8列目(H列)の数値合計が入る。
■あとがき
今回はExcel VBAマクロ。同じ項目の数値を合計するマクロ-SumIf関数
を示した。
For Nextでセルに逐次アクセスするので
データ数量が十万単位になると、
処理速度のおそさが気になるかもしれない。
その場合はまず配列に値を代入し、
For Nextループ完了後にまとめて
配列数値をセルに入れることで
処理速度がはやくなる。
Sub sample20a() Dim MR As Long Dim i As Long MR = Cells(Rows.Count, 1).End(xlUp).Row AA = Range(Cells(1, 20), Cells(MR, 20)) 'ω'変更 For i = 2 To MR AA(i, 1) = WorksheetFunction.SumIf(Range(Cells(2, 7), Cells(MR, 7)), Cells(i, 7), Range(Cells(2, 8), Cells(i, 8))) 'ω'変更 Next i Range(Cells(1, 20), Cells(MR, 20)) = AA 'ω'変更 Cells(1, 20) = "同じ項目の数値合計" End Subまた、LibreOfficeでは「WorksheetFunction」マクロが
うまく動作しないので使えなかった。
プログラムでなく、
シートに直接記述するSumIf関数は使用できる。
【参考】T2セルの式は
「=SUMIF($G$2:$G$29,G2,$H$2:$H$29)」
となる。
以上。