- 締切済み
エクセルのデータをまとめたいのだけれど
同じフォーマットのアンケート結果のデータが500シートくらいあって、それをひとつのシートにまとめたいのですが、どうすればいいのか思いつきません。どなたかご教授願います。 ちなみにフォーマットは、 住所 大阪市○○町 氏名 山田 花子 性別 女 こんなかんじのものです。これを 住所 氏名 性別 大阪市○○町 山田花子 女 東京都××区 鈴木太郎 男 こんな形のデータにまとめたいのです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- composer
- ベストアンサー率18% (9/48)
マクロを使いましょう。 知識が無いかもしれないので、できるだけ最低限の編集で完成するように作ってみました データをまとめるためのシートを新しく作って、名前を"リスト"とします "リスト"シート上で、キーボードのAltとF11を同時に押してください。 新しく出てきたウィンドウの左の方にある、Sheet#(リスト)という文字(#は数字です)をダブルクリックして、出てきた白い画面に、以下のプログラムをコピぺしてください \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Sub リスト作成() Dim objSheet As Object Dim intLoop As Integer sheets("リスト").select Range("A2").Select '住所をリストのA2以降に並べるとします intLoop = ActiveCell.Row For Each objSheet In ActiveWorkbook.Sheets ActiveWorkbook.ActiveSheet.Cells(intLoop, ActiveCell.Column).Value = objSheet.Range("B1").Value '住所が各シートのB1にあるとします。 intLoop = intLoop + 1 Next Range("B2").Select '名前をリストのB2以降に並べるとします intLoop = ActiveCell.Row For Each objSheet In ActiveWorkbook.Sheets ActiveWorkbook.ActiveSheet.Cells(intLoop, ActiveCell.Column).Value = objSheet.Range("B2").Value '名前が各シートのB2にあるとします。 intLoop = intLoop + 1 Next Range("C2").Select '性別をリストのC2以降に並べるとします intLoop = ActiveCell.Row For Each objSheet In ActiveWorkbook.Sheets ActiveWorkbook.ActiveSheet.Cells(intLoop, ActiveCell.Column).Value = objSheet.Range("B3").Value '性別が各シートのB3にあるとします。 intLoop = intLoop + 1 Next End Sub \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 各シートのデータの位置は、仮に決めたので、セルの位置を編集し直して下さい。 これでどうですか?
- imogasi
- ベストアンサー率27% (4737/17069)
この質問には (1)項目縦のものを横にする (2)500シートを1つにする のうち1シートや数シートなら関数でできますが、 (2)の問題の解決が難しい。 エクセルVBAでやるよりほかないでしょう。 (1)は 例データ A1:E12のA1:B12 氏名 A 1 0 0 住所 X 1 1 0 性別 F 1 1 1 1 1 1 性別 M 1 1 2 氏名 B 2 1 2 住所 Y 2 2 2 2 2 2 2 2 2 氏名 C 3 2 2 住所 Z 3 3 2 性別 M 3 3 3 ーーーーー C1に=COUNTIF($A$1:A1,"氏名") D1に=COUNTIF($A$1:A1,"住所") E1に=COUNTIF($A$1:A1,"性別") 下に式を複写する。 ーーーーー H1に氏名列として =OFFSET($A$1,MATCH(ROW(),$C$1:$C$12,0)-1,1) H2以下に複写します I列住所、J列性別は省略します。 もう少し丁寧にすべき点がありますが長くなるので略。 H,I,Jは別シートのA、B、C列などにもってこれます。式は少し変わりますが。
- fukkyse
- ベストアンサー率32% (130/402)
B1タイトル行・B2からB4・B5からB7(以降繰り返し)にデータが入力されているとして。 C2に=OFFSET($B$2,(ROW()-2)*3,0,1,1) D2に=OFFSET($B$3,(ROW()-2)*3,0,1,1) E2に=OFFSET($B$4,(ROW()-2)*3,0,1,1) 下方向へコピー。1シート:1アンケートの場合は的外れなので無視してください。
- ta123
- ベストアンサー率51% (95/186)
VBAなら簡単ですが他の方法ということでしたら、 まとめたいシートは1行目に「住所」「氏名」「性別」とあり2行目からデータが展開し、個々のデータのシート名は"Sheet1","Sheet2","Sheet3"・・・となっている場合 まとめたいシートに以下のような数式を作るのはどうでしょうか。 =INDIRECT("Sheet"&ROW()-1&"!A1") ※A1は住所等のセルアドレス。2行目にこの数式を入れると=Sheet1!A1と評価されます。 3行目以降はこの数式をコピーすればOKです。
- sesera
- ベストアンサー率32% (17/52)
質問者様の意図する回答になっていないかもしれないのですが、データをコピーして「形式を選択して貼り付け」で「行列を入れ替える」というチェックボックスをオンにするという方法はいかがでしょうか?もっと効率的に編集できる方法があるのかもしれませんが、ご参考になれば幸いです。