多少複雑な作業になりますが作業列や行を作って対応します。
ここでの方法はデータが追加されてシート1ではC列からZ列までにデータが入力され、1000行目までの表に対応できる式などを示します。それ以上になるのでしたらここでの方法を範囲を広げて応用してください。
シート1のAA5セルには次の式を入力して式を確定する段階でCtrlキーとShiftキーを押しながらEnterキーを押します。その式をAZ5セルまで横方向にドラッグコピーしたのちに1000行目まで下方にもドラッグコピーします。
=IF(COLUMN(A1)>COUNT($D5:$Z5),"",SMALL(IF($D5:$Z5<>"",COLUMN($A5:$W5),1000),COLUMN(A1)))
シート3に表から抽出するe,k,bなどの表をA1セルから下方に入力した場合としていますがここでは式を簡単にするためにシート2のC1セルから横方向にe,k,d,aのように列を変えてそれぞれ入力します。
そこで再び作業列をシート2の2行目と3行目に用意します。
C2セルには次の式を入力して右横方向にドラッグコピーします。
=IF(COUNTIF(Sheet1!$C$4:$C$1000,C$1)=0,"",COUNT(INDEX(Sheet1!$D$4:$D$1000,MATCH(C$1,Sheet1!$C$4:$C$1000,0)):INDEX(Sheet1!$Z$4:$Z$1000,MATCH(C$1,Sheet1!$C$4:$C$1000,0))))
B3セルには0を入力します。
C3セルには次の式を入力して右横方向にドラッグコピーします。
=IF(AND(C1<>"",C2<>""),B3+C2,IF(AND(C1<>"",C2=""),B2+1,""))
そこでお求めの表2ですがC5セルには次の式を入力して下方にドラッグコピーします。
=IF(ROW(A1)>MAX(B$3:Z$3),"",INDEX(C$1:Z$1,MATCH(ROW(A1)-0.1,B$3:Z$3,1)))
D5セルには次の式を入力してE5セルまでドラッグコピーしたのちに下方にもドラッグコピーします。
=IF(OR($C5="",COUNTIF(Sheet1!$C$4:$C$1000,$C5)=0),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$D$4:$Z$4,INDEX(Sheet1!$AA$4:$AZ$1000,MATCH($C5,Sheet1!$C$4:$C$1000,0),COUNTIF(C$5:C5,C5))),IF(COLUMN(A1)=2,INDEX(Sheet1!$D$5:$Z$1000,MATCH($C5,Sheet1!$C$5:$C$1000,0),INDEX(Sheet1!$AA$5:$AZ$1000,MATCH($C5,Sheet1!$C$5:$C$1000,0),COUNTIF($C$5:$C5,$C5))),"")))
これでシート1での表がZ列まで、1000行までのものについて、また、表を作るための検索項目であるe,k,d,aなどについてもかなりの数まで入力しても処理することができます。
マクロを使っても対処することができますが表1での入力した結果を表2に瞬時に反映できる点では関数で処理することが優れています。最初に関数などを設定するのは大変ですが一度入力して設定しておけばよいのでぜひご検討ください。
お礼
なるほど!確かに面倒かもしれないけど実現できそうです。 マクロで処理すれば何も問題ないと思います。 是非チャレンジしてみたいと思います。 貴重なアドバイスありがとうございました。