- ベストアンサー
Excel でどの関数を使ったらいいでしょうか
SHEET1に下のような表があるとします。(実際の並び順はランダムです) これをデータベースとして、 SHEET2のセルA1に「A社」、B1に「001」と入力すると C1に「製品A」と表示させるにはどの関数を使ったらよいでしょうか? 製品名には同じものはありませんが、社名・番号は同じものがいくつもあるので、社名・番号を入力することによって製品名が特定されるというようにしたいのです。 よろしくお願いいたします。 A B C 1 A社 001 製品A 2 A社 002 製品B 3 A社 003 製品C 4 B社 001 製品D 5 B社 002 製品E 6 B社 003 製品F 7 C社 001 製品G 8 C社 002 製品H
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 C1に、 =INDEX(Sheet1!$C$1:$C$8,SUMPRODUCT((Sheet1!$A$1:$A$8=A1)*(Sheet1!$B$1:$B$8=B1)*ROW($A$1:$A$8))) と入力します。 ただしこの式の場合、社名・番号の組み合わせが表に存在しない場合にSheet1のC1の値(例だと製品A)を表示してしまいます。 そこで、以下の式だと、該当するデータがない場合に、「#VALUE!」というエラーを表示しますので、エラートラップ出来ます。 =INDIRECT(ADDRESS(SUMPRODUCT((Sheet1!$A$1:$A$8=A1)*(Sheet1!$B$1:$B$8=B1)*ROW($A$1:$A$8)),3,1,TRUE,"Sheet1")) エラートラップは、上の数式をX(=は除く)とすると、 =IF(SUMPRODUCT((Sheet1!$A$1:$A$8=A1)*(Sheet1!$B$1:$B$8=B1)*ROW($A$1:$A$8))=0,"",X) とすれば、エラー時は表示なしに出来ます。 数式が長いですが。 ちなみに、表が昇順にソートされている必要はありません。
その他の回答 (3)
- fever
- ベストアンサー率43% (32/73)
DGET関数というのを使われては如何でしょうか? 表の一番上に1行足して、A1には社名・B1には番号・C1には製品名等の項目欄を設けます。 SHEET2の方にも同じ項目欄を作成して下さい。 SHEET2のC2に =IF(OR(A2="",B2=""),"",DGET(Sheet1!A1:C9,C1,A1:B2)) と入力してください。
お礼
ご回答ありがとうございます。 Sheet1と同じ順序で入力した時はうまくいったのですが、ランダムに入力するとVALUE!になってしまうようです… この式はそのまま下へドラッグしてコピーしては駄目だったんでしょうか…? とりあえずNo.#2の方のお答えで解決できましたが、DGET関数もこれから勉強してみます。 どうもありがとうございました。
- maruru01
- ベストアンサー率51% (1179/2272)
No.2です。 言い忘れてたことがあります。 Sheet1の表で、社命と番号の組み合わせはユニークである必要があります。 つまり、同じ社名で同じ番号のデータが複数あってはダメです。 もしあると、No.2の式では、でたらめな値を返します。
- arukamun
- ベストアンサー率35% (842/2394)
関数でという事ですが、一般的な方法が別にあります。 1行目に行を挿入して、 A1セルに会社名 B1セルに番号 C1セルに製品名 の様にして、 [データ]→[フィルタ]→[オートフィルタ]とすると、 |会社名▼|番号▼|製品名▼| の様になります。 会社名や番号を選択することで商品を絞り込めます。 どうしても関数でという事ですと、データが降順にソートされている事が前提になってしまいます。 また、2個の値から1個を絞り込むようなものは見つかりませんでした(私の知識不足かもしれませんが)。
お礼
ご回答ありがとうございます。 オートフィルタでも特定は可能なのですが、入力にスピードが要求されるので、プルダウンメニューではなくてインプットした瞬間に表示されるようにしたかったのでした。 No.#2の方の回答で解決できました。 どうもありがとうございました。
お礼
できました!どうもありがとうございます!! どうしてこういう式になるのかは未だ全然理解できていないのですが…これから勉強して理解できるようにしようと思います。 とりあえず大変助かりました。 ありがとうございました!