- ベストアンサー
Excel行毎に項目列数の違う表を行列変換したい
A列に何かしらの名称、B列以降に文字列値があるとします。 鈴木|あああ|いいい|ううう| 佐藤|えええ| | | 田中|ううう|かかか| | ・・・ という表を、 鈴木|あああ 鈴木|いいい 鈴木|ううう 佐藤|えええ 田中|ううう 田中|かかか ・・・ というように変換したいのですが、うまい方法ありませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
シート1ではお示しの表がA,B,C,D列の2行目から下方に入力されているとします。 E列を作業列としてE1セルには0を入力し、E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",COUNTA(B2:D2)+MAX(E$1:E1)) お求めの表をシート2のA,B列の2行目から下方に作るとしてA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(INDEX(Sheet1!A:A,MATCH(ROW(A1)-1,Sheet1!E:E,1)+1)=0,"",INDEX(Sheet1!A:A,MATCH(ROW(A1)-1,Sheet1!E:E,1)+1)) B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",INDEX(Sheet1!A:D,MATCH(A2,Sheet1!A:A,0),COUNTIF(A$2:A2,A2)+1))
その他の回答 (1)
せっかく書いてたのに、質問削除しないでよ。 で、本題です。 名前の列を後に続く列の間にはさんでいって、右から2列ずつ表の下に移していったらどうでしょう。 機械的な作業でできますから、VBAで自動化も簡単ですね。 空白行ばかりができるかもしれませんが、第2行でソートすれば空白行だけ集めることができます。そうしてまとめて削除。 最後に第2行でソートすれば出来上がりです。 具体的にはこんな風です。 鈴木|あああ|いいい|ううう| 佐藤|えええ| | | 田中|ううう|かかか| | 鈴木|あああ|鈴木|いいい|鈴木|ううう| 佐藤|えええ|佐藤| |佐藤| | 田中|ううう|田中|かかか|田中| | 鈴木|あああ|鈴木|いいい| 佐藤|えええ|佐藤| | 田中|ううう|田中|かかか| 鈴木|ううう| 佐藤| | 田中| | 鈴木|あああ| 佐藤|えええ| 田中|ううう| 鈴木|ううう| 佐藤| | 田中| | 鈴木|いいい| 佐藤| | 田中|かかか| 以下略
お礼
>せっかく書いてたのに、質問削除しないでよ。 申し訳ありませんでした。A列とB列以降の違いがわかりにくいかなと思って削除して加筆・再投稿してしまいました。 わかりやすい解説ありがとうございました。参考にさせていただきます。
お礼
関数だけでできるという事に驚きです。ありがとうございました。