【Excel VBA】SUMIFを使わず高速で条件付き合計

Excel VBA

2No(@2No45519933)です。

普段使用しているExcel。
手軽に計算ができるので、毎日使っているのですが、
大量のデータに対して内蔵されている関数を使うと処理が終わるまでしばらく待機。
最悪Excel自体が落ちちゃうなんてことがありました。

特に条件付きで合計値を出す、SUMIFがExcel内の処理の影響か、計算が終了まで恐ろしく時間がかかる…

今回はそんな条件付き合計をExcel関数SUMIFを使わず、Excel VBAで数秒まで短縮した方法。
参考
http://www4.synapse.ne.jp/yone/excel_exercise/exercise_vba_goukei.html

はじめに

作業で重複しているキーに対して、一度重複を削除。
その後、単一のキーに対して情報一覧からその合計を求めることに。
もらったファイルを覗いた所、30万行超え…

桁数間違えた?と思って桁数確認しちゃったよ…

とりあえず何も考えず、ExcelのSUMIF関数を使用したところ、処理終了まで5時間以上待機。
こんなの待っていられんと何も考えず、VBAでApplication.WorksheetFunction.SUMIFを使った所
何も変わらず5時間以上待機。

ダメじゃん…

ということで、WorksheetFunction.SUMIFを使わずに同じ結果になるようにVBAで作成してみました。

やりたいこと

重複しているキーの重複削除
一覧からキーを検索して、そこに対応している数量を加算

構成はこんな感じをイメージ

データ(元データシート)

検索キー
A10
B5
C9
A1
C1

計算結果(合計結果シート)

検索キー合計値
A11
B5
C10

条件を指定して数値を合計するコード

元データが上書きされて確認が出来ないことを防ぐ為、
結果は別シートに出力されるようにしています。
※自分の作成したいように書き換えてください

同じ行数のデータに対してこのマクロを使った所、私のPCでは大体10秒前後で完了…

5時間が10秒まで短縮することが出来た!やったぜ。

これで待機中にTwitterのTLを覗けなくなりました。

うーん残念?w

また効率化できそうなことがあれば追記していきたいと思います。

みなさま良いExcel VBAライフを!

それでは!