Excel-VBA 同じ項目の数値を合計するマクロ-SumIf関数

2019/12/01

プログラム

t f B! P L
Excel VBAマクロ。今回は
同じ項目の数値を合計するマクロ-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ループ。
※[9.] 20列目(T列)1行目に「同じ項目の数値合計」
列タイトル追加。

■マクロ実行対象

「部品データ_191128.xlsx」の「部品表」シート。

■マクロ実行結果

実行すると、20列目(T列)に
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)」
となる。
以上。

ブログ アーカイブ

ラベル

このブログを検索

スポンサーリンク

自己紹介

機械メーカー総合職正社員10年勤務後退職。 エクセルVBAプログラム歴 5年。 LibreOffice(無料)でVBAマクロ検証。
■Fortniteクエスト攻略動画■
■Twitter■
⇒詳細プロフィールを表示

QooQ