« 弔辞 | メイン | 旅行準備 »

エクセルで50位までのデータを引っ張り出す

 とあるデータの集計(約10種類のデータでデータ数は16000件ぐらい)を今までは他部署の人がエクセル手作業でやっていたのだが、その人が退職して作業が中断したままになっていたのでコードを組んでやってみようと思った。

 処理の内容は種類毎・数量の多い順にソートし、種類Aは上位20位まで・種類Bは上位50位までのデータを・・・って感じで決められた順位までのデータを引っ張り出して並べるというもの。ソートして上位50件のデータを引っ張り出してRANK関数で・・・と思ったがふと疑問が。「1~50位」と「上位50件」って微妙に違う。同率50位が3件あればデータ件数は52件なんですな。データの依頼元に相談しても「いいよそんなの」と言われてしまうのだが、将来何かあったときに突っ込まれるのはこっちなので慎重に考える。いろんな考え方・やり方があるんだろうけど答えにたどり着けば一緒ってことで、半ば力業での処理になる(いつものことだが)。多めに抽出した後に順位付けをし、指定された順位以内かどうかをチェックしてフラグを立て、フラグが立った行のデータを持ってくる・・・という処理にしてみた。一応これで目的通り動いたけれど、「多めに抽出」の想定を越えた同率データが出てきたら切り捨てられるデータも出て来ちゃうだろうな。今回はそこまでこだわる必要は全くなかったのでここまでにしておいたが、やや悔いというか疑問も残る。

 人間だったら「種別Bは同率50位がたくさんあったんで49位までにしておきました」などの曖昧な処理でうまくこなしてしまうんだろうけどなあ・・・。

コメントを投稿