会社を卒業したのんちおじさん。

人生は知恵と工夫と思いやり!
優しさほど強いものはなく、本当の強さほど優しいものはない -ラルフ・W・ソックマン-

COUNTIFでできた、と思ったんだけど。

2009-01-29 12:14:11 | Excelのお話
今、メーカーに申請する特価対応データを抽出するプログラムを作っています。

このメーカーは顧客ごとに特価番号を設定しています。

メーカーから特価一覧データというのがありそれは

客先  商品  特価番号
顧客A 商品A ZZZ123
顧客A 商品B ZZZ123
顧客B 商品C ZBB988
顧客A 商品D ZZZ123

こんな様式になっています。

今、顧客Aが「商品A」「商品B」「商品C」を買うと特価一覧データから「商品A」「商品B」が特価だというのが分かるのですが該当データにフラグを立てそれを残しCSVファイルとして出力しなければなりません、何かよい方法はないかとずっと考えていました。

売上データは一か月分あり手作業ではかなりの労力になります、データの抽出だけならAccessなら簡単にできます、でも作業の流れの中で途中でAccessを起動するという処理をしたくないのです。

処理としては

「商品A」+「ZZZ123」という組み合わせが特価一覧データにあれば「TRUE」

こんな感じ・・、さらに「50個入り」とか「100個入り」なんて商品がありそれをバラで販売しているものもあるのです、特価一覧表にはバラのデータはありません、これをパック商品と言い、型番からそれと分かるので単品の型番としてはその部分を除いた型番でオフコンに登録されているのです、売上も当然ほとんどが単品型番での売上です。

そのためパック型番から単品型番を抽出する作業が割って入ることになるのですがこれ自体そう難しいことではありません。

該当データにフラグを立てるにはどうすればいいか、マクロで膨大なデータを端から順にあたるか、「vlookup」「lookup」「match」「index」なんかを使って何とかならないかあるいは「条件付書式」は使えないかとか・・いくら考えても考えがまとまらないのです。

でもしつこく考えてみると他の顧客でも「商品A」の特価を持っているところはいくらでもあるのですが特価番号が違います、つまり「商品A」+「ZZZ123」というデータは複数存在することはありえないことに着目、そこで行き着いたのは「countif」を使うこと、つまり「=countif(特価一覧表,商品A)」と「=countif(特価一覧表,特価番号)」のANDを取り

=and(countif(特価一覧表,商品A),countif(特価一覧表,特価番号))

これが「TRUE」になれば該当データだということにたどり着きました。

と思ったのですが・・・・、甘かった。

つづく・・・。