>A班の人の氏名をE1、E2・・・に表示させる
だけでしたらまだ良かったのですが、
>この人以外の
という条件が付けられているが故に、相当長ったらしい関数となりました。
まず、A1セルに「会員番号」等の何らかの文字列を入力して下さい。
次に、D1セルに次の関数を入力して下さい。
=IF($D$3="","",IF(COUNTIF($A:$A,$D$3),VLOOKUP($D$3,$A:$B,2,FALSE)&"","(該当者なし)"))
次に、F1セルに次の関数を入力して下さい。
=$A$1
次に、D2セルに次の関数を入力して下さい。
=IF(COUNTIF($A:$A,$D$3),VLOOKUP($D$3,$A:$C,3,FALSE)&"","")
次に、F2セルに次の関数を入力して下さい。
=IF(ROWS($2:2)>COUNTIF($C:$C,$D$2)-1,"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))+1):INDEX($C:$C,ROWS($A:$A)),0)+IF(MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)=MATCH($D$3,$A:$A,0),MATCH($D$3,$A:$A,0),MATCH(F1,$A:$A,0))))
次に、E2セルに次の関数を入力して下さい。
=IF(OR($F2="",COUNTIF($A:$A,$F2)=0),"",VLOOKUP($F2,$A:$B,2,FALSE)&"")
次に、E2~F2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
以上です。
因みに、
>この人以外のA班の人の氏名を
という条件ではなく、「この人も含めたA班の全員の氏名を」という条件であれば、F2セルに入力する関数を次の様に多少短いものとする事が出来ます。
=IF(ROWS($2:2)>COUNTIF($C:$C,$D$2),"",INDEX($A:$A,MATCH($D$2,INDEX($C:$C,MATCH(F1,$A:$A,0)+1):INDEX($C:$C,ROWS($A:$A)),0)+MATCH(F1,$A:$A,0)))
お礼
早速のご回答ありがとうございました! 参考にさせていただきます。
補足
すいません、教えていただいた素晴らしい回答を実践してみたのですが、すべての行に関数を入れてしまうと、ファイルが重くなってしまって動きが遅くなってしまいました。 というのも、データ行自体が5万行あるんです。行すべてにコピーせずに、いくつかのセルだけで処理できませんか? お忙しい中申し訳ありませんが、よろしくお願いします。