- 締切済み
複数の条件に合う行の特定のセルを返す
ほぼ同じ質問をいくつか見かけたのですが、その式を自分の内容に置き換えても全く希望通りの結果が出ず、質問させてください。 2 1 Aさん 4 1 Bさん 5 1 Cさん 2 2 Dさん 5 2 Eさん セルのA1には「2」、B1には「1」、C1には「Aさん」と入ったシートがあり、例えばセルのD1に A列、B列ともに「2」が入力されている4行目のC列「Dさん」という値が反映して欲しいのですが、その関数が分からなく困っています。 他にもA列が「5」、B列が「1」の結果が(Cさん)が欲しい時もあり、条件にはA列の値とB列の値を使う方法で考えています。 お知恵を貸してください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データがSheet1のA列~C列に並んでいて、各列の1行目は項目名が入力されていて、実際のデータは2行目以下に入力されているものとします。 そして、返される結果はSheet2のC列に表示させるものとし、例えば、「Bさん」という結果を返そうとする場合において、「4」という条件はSheet2のA列に入力し、「1」という条件はSheet2のB列に入力するものとします。 【方法その1】(作業列を必要とします) 適当な列(ここでは仮にSheet3のA列とします)の2行目のセル(Sheet3のA2セル)に次の数式を入力して下さい。 =IF(OR(INDEX(Sheet1!$A:$A,ROW())="",INDEX(Sheet1!$B:$B,ROW())=""),"",INDEX(Sheet1!$A:$A,ROW())&"■"&INDEX(Sheet1!$B:$B,ROW())) 次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に貼り付けて下さい。 次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(COUNTIF(Sheet3!$A:$A,INDEX($A:$A,ROW())&"■"&INDEX($B:$B,ROW())),INDEX(Sheet1!$C:$C,MATCH(INDEX($A:$A,ROW())&"■"&INDEX($B:$B,ROW()),Sheet3!$A:$A,0)),IF(OR(INDEX($A:$A,ROW())="",INDEX($B:$B,ROW())=""),"","(該当無し)")) 次に、Sheet2のC2セルをコピーして、Sheet2のC3以下に貼り付けて下さい。 後は、Sheet2のA列とB列に条件を入力しますと、Sheet2のC列に結果が自動的に返されます。 【方法その2】(Excel2007よりも前のバージョンでは使えません。また、リストの行数が数千行以上にもなる場合には、計算処理が重くなります) まず、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR(INDEX($A:$A,ROW())="",INDEX($B:$B,ROW())=""),"",IF(COUNTIFS(Sheet1!$A:$A,INDEX($A:$A,ROW()),Sheet1!$B:$B,INDEX($B:$B,ROW()))=1,INDEX(Sheet1!$C:$C,SUMPRODUCT(ROW(Sheet1!$C$1:INDEX(Sheet1!$C:$C,MATCH("*?",Sheet1!$C:$C,-1)))*(Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($A:$A,ROW()))*(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($B:$B,ROW())))),IF(COUNTIFS(Sheet1!$A:$A,INDEX($A:$A,ROW()),Sheet1!$B:$B,INDEX($B:$B,ROW())),"(重複あり)","(該当無し)"))) 次に、Sheet2のC2セルをコピーして、Sheet2のC3以下に貼り付けて下さい。 後は、Sheet2のA列とB列に条件を入力しますと、Sheet2のC列に結果が自動的に返されます。 【方法その3】(Excel2007よりも前のバージョンでも使用可能ですが、リストの行数が数千行以上にもなる場合には、計算処理が重くなります) まず、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR(INDEX($A:$A,ROW())="",INDEX($B:$B,ROW())=""),"",IF(SUMPRODUCT((Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($A:$A,ROW()))*(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($B:$B,ROW())))=1,INDEX(Sheet1!$C:$C,SUMPRODUCT(ROW(Sheet1!$C$1:INDEX(Sheet1!$C:$C,MATCH("*?",Sheet1!$C:$C,-1)))*(Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($A:$A,ROW()))*(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($B:$B,ROW())))),IF(SUMPRODUCT((Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($A:$A,ROW()))*(Sheet1!$B$1:INDEX(Sheet1!$B:$B,MATCH("*?",Sheet1!$C:$C,-1))=INDEX($B:$B,ROW()))),"(重複あり)","(該当無し)"))) 次に、Sheet2のC2セルをコピーして、Sheet2のC3以下に貼り付けて下さい。 後は、Sheet2のA列とB列に条件を入力しますと、Sheet2のC列に結果が自動的に返されます。
- keithin
- ベストアンサー率66% (5278/7941)
こんばんは。 たとえばD1セルに =INDEX(C:C,MIN(IF((A1:A10=2)*(B1:B10=2),ROW(C1:C10),999)))&"" あるいは =INDEX(C:C,MIN(IF((A1:A10=5)*(B1:B10=1),ROW(C1:C10),999)))&"" のように記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力します。 #ご利用のエクセルのバージョンに応じて、違ったやり口が出来る場合もあります。ご相談投稿ではご利用のソフト名は元より、普段あなたが使っているソフトのバージョンまでキチンと明記する事を憶えて下さい。 #補足 >その式を自分の内容に置き換えても全く希望通りの結果が出ず なのにまた「例えば」でご相談を投稿していては、結局一緒です。今度は自分用にやり直せると考えていらっしゃるのでしょうか。