- ベストアンサー
Excel VLOOKUPで複数該当する人の氏名を表示させる方法
- ExcelのVLOOKUP関数を使うと、複数該当する場合には特定の条件で絞り込んで表示することができます。
- 例えば、○が付いている中で「番号」が2番目に若い者の「氏名」を表示したい場合、以下のような方法があります。
- まず、VLOOKUP関数で○が付いている人の情報を抽出し、INDEX関数とMATCH関数を組み合わせて2番目に若い「氏名」を表示します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえずご質問の直接の回答としては =IF(COUNTIF(A:A,"○")>1,INDEX(C:C,SMALL(IF($A$1:$A$100="○",ROW($A$1:$A$100)),2)),"") と記入し、必ずコントロールキーとシフトキーを押してEnterで入力します。 #この手の計算式は、初心者さんは喜んで飛びつきますが、こんなイミフメイの計算式を使うのは愚策です。 #もっとずっと簡単な方法 A B C D 1 氏名 2 青木 3 1 ○ 井上 4 上田 5 2 ○ 江口 6 3 ○ 太田 A2: =IF(B2="○",COUNTIF($B$2:B2,B2),"") 以下コピー のようにして該当行に番号を計算で出して置けば、2をVLOOKUPするだけで簡単にデータを引っ張ってこれます。 #参考 A B C X 1 2 3○ 3 4 5○ 5 6○ 6 何かの理由でどーしてもA列を使いたくなければ、どこかてきとーなX列(別に同じシートじゃなくても構わない)に X2: =IF(A2="○",ROW(),"") 以下コピー 名前は =INDEX(C:C,SMALL(X:X,2)) などのようにしても持ってこれます。 COUNTIFで1,2,3を並べる手と、ROW()で3,5,6を並べる手と、どちらでも好きな方法を使います。
その他の回答 (2)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>例えば、○が付いている中で、「番号」が2番めに若い者の「氏名」を、関数で表示させる まず、適当な列(ここでは仮に、H列とします)を作業列として使う事にして、B列において最初に番号が振られている行と、同じ行のH列のセルであるH2セルに、次の関数を入力して下さい。 =IF($A2="○",$B2,"") 次に、H2セルをコピーして、H3以下に貼り付けて下さい。 次に、「○が付いている中で、『番号』が2番めに若い者の『氏名』を表示させたいセル」に次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT($H:$H),"",INDEX($C:$C,MATCH(SMALL($H:$H,ROWS($2:2)),$H:$H,0))) 以上です。 因みに、「○が付いている中で、『番号』が2番めに若い者の『氏名』」だけではなく、「○が付いている全員の『番号』と『氏名』」を、「番号」が若い順に表示させる場合には、以下の様にします。 今仮に、「○が付いている者のデータ」の内、「番号」をE列に、「氏名」をF列に表示させるものとします。 まず、先程と同様に、H2セルに、次の関数を入力して下さい。 =IF($A2="○",$B2,"") 次に、E1セルに次の関数を入力して下さい。 =$B$1 次に、F1セルに次の関数を入力して下さい。 =$C$1 次に、E2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT($H:$H),"",INDEX($A:$C,MATCH(SMALL($H:$H,ROWS($2:2)),$H:$H,0),MATCH(E$1,$A$1:$C$1,0))) 次に、E2セルをコピーして、F2セルに貼り付けて下さい。 次に、E2~F2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 以上です。 尚、B列に入力されている「番号」に、同じものが複数回現れる様な事が無い場合で、「『番号』が若い順」ではなく、「B列、C列に入力されている行が上のものから順番に表示する」のでも宜しければ、作業列を用いずに済ませる方法もあります。 但し、上の行から順番にしか表示出来ませんから、「○が付いているものの中の、上から2番目のデータのみを表示させる」という様な事は出来ません。 まず、E1セルに次の関数を入力して下さい。 =$B$1 次に、F1セルに次の関数を入力して下さい。 =$C$1 次に、E2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($A:$A,"○"),"",VLOOKUP("○",INDEX($A:$A,MATCH($E1,$B:$B,0)+1):INDEX($C:$C,ROWS(E:E)),MATCH(E$1,$A$1:$C$1,0),FALSE)) 次に、E2セルをコピーして、F2セルに貼り付けて下さい。 次に、E2~F2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 以上です。
お礼
御回答有難うございます。 もっとずっと簡単な方法を使わせて頂きました。 他の回答者の皆様もありがとうございました。