シート1に元の表があるとしてシート2にお求めの表を作るとします。
内容が複雑ですのでシート1では多くの作業列を作って対応することにします。
シート1のD2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(C2="","",CODE(C2))
E2セルには次の式を入力して下方にオートフィルドラッグします。
=IF(D2="","",MATCH(D2,I:I,1))
F2セルには次の式を入力して下方にオートフィルドラッグします。
=(E2-1)*3+2+COUNT(E$2:E2)
なお、データベースになるものですがH1セルから下方には、ア、カ、サ、タ、ナ、ハ、マ、ヤ、ラ、ワとH10セルまで入力します。
I1セルには次の式を入力して下方にオートフィルドラッグします。
=IF(H1<>"",CODE(H1),IF(ROW(A1)=11,9700,""))
J1セルには次の式を入力して下方にオートフィルドラッグします。
=IF(H1="","",(ROW(A1)-1)*3+COUNTIF(D:D,"<"&I1)+1)
その後にシート2ではA1セルに次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(AND(COUNTIF(Sheet1!$J:$J,ROW(A1))>0,COLUMN(A1)=1),INDEX(Sheet1!$H:$H,MATCH(ROW(A1),Sheet1!$J:$J,0))&"行",IF(COUNTIF(Sheet1!$J:$J,ROW(A1)-1)>0,IF(COLUMN(A1)=1,"名前",IF(COLUMN(A1)=2,"フリガナ",IF(COLUMN(A1)=3,"会員番号",""))),IF(COUNTIF(Sheet1!$F:$F,ROW(A1))>0,IF(COLUMN(A1)=1,INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!$F:$F,0)),IF(COLUMN(A1)=2,INDEX(Sheet1!$C:$C,MATCH(ROW(A1),Sheet1!$F:$F,0)),IF(COLUMN(A1)=3,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$F:$F,0)),""))),"")))
これでお望みの表がシート2に表示されます。
お礼
分かりやすい説明と設定しやすい関数を教えていただきありがとうございました。 やはり下準備(作業列)の設置が必要とよくわかりました。 これから関数もVBAも出来るように勉強いたします。 勉強になり、ありがとうございました。