同じ項目の数値を合計するマクロ-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)」
となる。
以上。


