• ベストアンサー

Excelの同一フォーマット(アンケート)のシートを別シートにまとめたい。

Excelで同じフォーマットの日報をまとめたいのです。何件か似たようなご質問もあったように思ったのですが、ちょっとわかりませんでした。 どうぞ教えてください。 できればExcelの機能で出来ればと思っています。 もし他の方法なら、それでも構いません! ○ファイルは一つで、シートが分かれています。 ・・・シート1~シート30 ○シートのフォーマット セルD2に「日付」、F2に「場所」 C4、C6、C8、C10、C12に日報の内容が入っています。 ○この各シートをシート31に一括まとめたいのです。 集計等は必要ありません。 ○まとめるシートのフォーマットイメージ     日付│場所│C4│C6│C8│C10│C12 シート1 5/2│・・│・・・・ シート2 5/3│・・│・・・・  ・  ・  ・ シート30 すいません。どなたか教えていただけますか。 どうぞよろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • rio_d
  • ベストアンサー率47% (71/149)
回答No.1

こんにちは。 indirectワークシート関数を使用します。 下記の手順でやってみましょう。 (1)A2~A31に「シート1」~「シート31」と入力します。必ずシート名と合致させて下さい。 (2)B1~H1に「日付」「場所」「C4」…と入力します。 準備おわり。 (3)B2セルに、下記関数を入力します。  「=indirect($a2 & "!D2")」 (4)C2セルに、下記関数を入力します。  「=indirect($a2 & "!F2")」 (5)D2セルに、下記関数を入力します。  「=indirect($a2 & "!" & B$1)」 一行終わり。 (6)D2セルの内容をE2~H2にコピーします。 (7)B2~H2セルの内容を、下の行にがーっとコピーします。 できあがり。 indirectワークシート関数とは文字列で指定したセルの値を参照する関数です。 (3)では、  「=indirect($a2 & "!D2")」 →「=indirect("シート1" & "!D2")」 →「=indirect("シート1!D2")」 ということをやっています。

yuzoy
質問者

お礼

ありがとうございます! 出来ました。文字列が多いシートであるため、非常に役立ちました。 (3)と(4)の作業を行ない、進めたのですが、 ちなみに (5)の「"!" & B$1」というのは、どういうことを行なっているのでしょうか。

その他の回答 (2)

  • rio_d
  • ベストアンサー率47% (71/149)
回答No.3

こんばんは。遅くなりました。 すみません。(5)、間違っていましたね(汗 下記に読み替えてください。 (5)D2セルに、下記関数を入力します。  「=indirect($a2 & "!" & D$1)」 ちなみに(5)では、  「=indirect($a2 & "!" & D$1)」 →「=indirect("シート1" & "!" & "C4")」 →「=indirect("シート1!C4")」 ということをやっています。 混乱させてしまいましたことをお詫び申し上げます。

yuzoy
質問者

お礼

ありがとうございました!

  • at121
  • ベストアンサー率41% (85/206)
回答No.2

動作 日報シート Sheet1 から Sheet数字 まで 集計シート にデータをコピーします 事前設定  日報シート名 = "*Sheet*#*"   日報シート名が シート11 なら "*シート*#*"          # は数字  * はワイルドカード  集計先シート を選んでから操作するなら    Set 集計先シート = ActiveSheet を有効しておく  集計先シートの シート名を固定するなら   'Set 集計先シート = Sheet("集計シート") の'を外す  見出し =    / 区切りで適当に設定 注意 集計先シート は毎回クリアします マクロ VBエディタを開き 標準モジュールを追加して  標準モジュールに貼り付け   ↓     ↓ Sub 日報シートのデータを集める() 日報シート名 = "*Sheet*#*" '日報シート名に併せて検討 * Set 集計先シート = ActiveSheet 'Set 集計先シート = Sheet("集計シート")' With 集計先シート .Cells.Clear '集計先シートをクリア 見出し = "日付/場所/c4/c6/c8/c10/c12" 見出し = Split(見出し, "/") データ設定行 = 1 .Range(.Cells(データ設定行, 1), .Cells(データ設定行, 7)) = 見出し For Each シート In Worksheets If 集計先シート.Name <> シート.Name Then If シート.Name Like 日報シート名 Then '集計対象シート名を確認 データ設定行 = データ設定行 + 1 '日報データ読み出し 日報データ = シート.Range("D2").Value & vbTab & _ シート.Range("F2").Value & vbTab & _ シート.Range("C4").Value & vbTab & _ シート.Range("C6").Value & vbTab & _ シート.Range("C8").Value & vbTab & _ シート.Range("C10").Value & vbTab & _ シート.Range("C12").Value 日報データ = Split(日報データ, vbTab) 'データ書き出し .Range(.Cells(データ設定行, 1), .Cells(データ設定行, 7)) = 日報データ End If End If Next End With End Sub

yuzoy
質問者

お礼

今回は#1のやり方でさせていただきました。 また必要なときもあると思います。参考にさせていただきます。 ご連絡ありがとうございました。