- 締切済み
抽出方法が分かりません
Excelで A B C 1 A社【コード5505】 2 商品コード 数量 売上高 3 aaaa 100 10000 4 bbbb 150 10000 5 6 B社【コード5509】 7 商品コード 数量 売上高 8 bbbb 80 800 9 10 C社【コード1304】 11 商品コード 数量 売上高 12 fffff 20 10000 という表があり、B社【得意先コード5509】の販売した「bbbb」の数量「80」を抽出したいと思います。 普通にVLOOKUPを使用するとA社も「bbbb」を販売しているため、この場合、関数は何を使用すればいいでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
>その形式を毎日正すのが非常に難しい 確かにありますねぇ…そういうこと。 VBA等を用いて「自動的に形式を毎日正すようにする」のが 本来のアプローチかとも思いますが、当座の解決として、 「そのままの状態で関数を使う」方法を。 以下、仮に、E1セルに会社コードが、F1セルに商品コードが、 それぞれ元データと同じ表記で入力されているとします。 ●E1セルで指定した会社の、F1セルで指定した商品を、A1:A999の範囲から探して、B列の数量を返す。 =VLOOKUP(F1,OFFSET($A$1:$C$1,MATCH(E1,$A$1:$A$999,0),,MIN(INDEX(MOD(($A$1:$A$999="")*ROW($A$1:$A$999)-MATCH(E1,$A$1:$A$999,0),2^16),))),2,0) ・第1行~第999行の範囲で、 A列の値が会社コード(E1)と一致する行を探す(開始行) ・開始行~第999行の範囲で、 A列の値が空白である最初の行を探す(終了行) ・開始行~終了行までの範囲で、 A列の値が商品コード(F1)と一致する行を探して2列目の値を返す。 ※数式中に会社コードの参照(E1)が2回登場するので注意。 ※$A$1:$A$999の部分は、元データの行数よりも大きく設定する必要があります。 (会社コード以降の「次の空白セル」を探すので) Excel2003で動作確認済。 以上ご参考まで。
- mu2011
- ベストアンサー率38% (1910/4994)
次の様な表(A1:D5)となる事を想定していますが如何でしょうか。(列ずれはご勘弁下さい) 会社コード 商品コード 数量 売上高 5505 aaaa 100 10000 5505 bbbb 150 10000 5509 bbbb 80 800 1304 fffff 20 10000
お礼
なるほど! ありがとうございました。 参考にさせていただきたいと思います。
- mu2011
- ベストアンサー率38% (1910/4994)
エクセル表として、今後の拡張性が芳しくないと思いますので、データ再配置を検討した方が良いと思いますが如何でしょうか。 例えば、A列:会社コード、B列:商品コード、C列:数量、D列:売上高にすれば、データが一元化できフィルタ等の利用も可能となる 一例ですが、B社【得意先コード5509】の販売した「bbbb」の数量「80」は、次の様な数式で可能となります =INDEX(C:C,SUMPRODUCT(($A$2:$A$100=5509)*($B$2:$B$100="bbbb")*ROW($A$2:$A$100)))
補足
ありがとうございました! 実際に教えていただいた関数で参照させてみたのですが、80が抽出されません・・・。どこか問題があるのでしょうか。 お忙しいところすみませんが、よろしくお願いします。
- neKo_deux
- ベストアンサー率44% (5541/12319)
表の形状がマズイのかと。 B C D E F 1 A社 5505 aaaa 100 10000 2 A社 5505 bbbb 150 10000 3 B社 5509 bbbb 080 00800 4 C社 1304 fffff 020 10000 A列に、=C1&D1 とかの式(5505aaaa)を入れとけば、検索できるかと。
お礼
ありがとうございます。 仰るとおりだと思います。 実はこちらの形式がシステムから排出されるCSVのテンプレートになり、取引先数も10や20ではないので、その形式を毎日正すのが非常に難しく、関数で解決しようとしております。 何はともあれご回答ありがとうございました。
お礼
お礼が遅くなりました。 ありがとうございました。参考にさせていただきます。