スポンサーリンク

【Excel/関数】大量データのCOUNTIFの高速化

エクセル
スポンサーリンク
※当サイトは広告を含みます

先日大量データのVLOOKUP高速化をやりましたが、VLOOKUPより遅いのがCOUNTIF!
VLOOKUPは見つけたらほいっとそこで終わり、に比してCOUNTIFは「この中に何個あるか」なので最後まで探しに行かなきゃいけないから、時間がかかるのも納得。

で、COUNTIFを早くする方法を考えてみました。
で、編み出した方法はピボットとVLOOKUPの合わせ技で、COUNTIFと同じ結果を得る方法です。
なので「COUNTIFを高速化する」というわけではない。別の手段を使って高速化、です。

1.COUNTIFを高速化

まず、わかりやすいように小さいデータでやってみます。
下図の表でやってみます。
A列にIDがあります。このIDがE列に何個あるかを数えたい。E列は200行目まであります。
数えた結果をB列に出力します。

(1)普通のCOUNTIF

まず、普通にCOUNTIFを入力してみます。
こうですね。
=COUNTIF($E$2:$E$200,A2)

(2)ピボットテーブルでの集計とVLOOKUPの合わせ技でCOUNTIFを実現する方法

次にピボットテーブルとVLOOKUPの合わせ技でCOUNTIFを実現する方法をやってみます。

①まず、E列のデータを選択してピボットテーブルでID毎のデータの個数を集計します。
合計ではなく、個数にするのを忘れずに!
ピボットテーブルはコピーして値貼り付けしておきます。集計したい表の横っちょにでも貼り付けします。

②VLOOKUPを使って、ピボットテーブルで集計した個数をB列に出力します。

③これでもそこそこ早くなりますが、VLOOKUPの近似値を使うと、もっと早くなります。
近似値を使ったVLOOKUPの高速化方法はこちらの記事をご参照ください
【Excel/関数】大量データのVLOOKUPをウソみたいに早くする方法

近似値を利用する場合、VLOOKUPの参照範囲は昇順に並べておく必要があります。ピボットテーブルなので、通常は昇順に並んでいるはずですが、昇順でない場合は並べ替えを行ってからVLOOKUPをかけます。
VLOOKUPの近似値は検索方法にTRUE(または1)を指定します。
キーが一致することを確認するためIF式をかまします。VLOOKUP近似値で1列目を持ってきて、それがキーと一致していたらVLOOKUP近似値で2列目を持ってくる式に入ります。キーが一致していなければ「参照範囲内にキーがない」ということなので「0」を返すようにします。

ちょっと長くなりますが。

=IF(VLOOKUP(A3,$G$4:$H$13,1,1)=A3,VLOOKUP(A3,$G$4:$H$13,2,1),0)

これで、COUNTIFと同じ答えが返ることになります。

2.大量データでやってみる~時間の比較~

大きいデータでやってみます。
50万行のデータを100万行のデータの中からカウントします。

(1)普通にCOUNTIFした場合。

再計算〇%・・・で約16分かかりました

(2)ピボットとVLOOKUP近似値の合わせ技でやってみる

ピボット集計とVLOOKUPと合わせて2分とかからなかったのでは?というスピード感。

COUNTIF自体を高速化するわけではないですが、合わせ技で高速化実現。もしよかったら使ってみてください!お読みいただきありがとうございました。

スポンサーリンク
スポンサーリンク
エクセル
スポンサーリンク
mwkをフォローする
エクセルがともだち

コメント

タイトルとURLをコピーしました