• ベストアンサー

複数シートのデータを1シートにまとめたい

添付ファイルのシート名(A商店~C商店)のような同フォームの複数シートのデータをシート名(まとめ)にょうに1シートにまとめたいのですが、いい方法ご存知でしたらお教えください。  パワークエリで出来そうな気もするのですが  ちなみに実作業で使用するファイルはシート数は100くらいあり、行数も100行くらいあります。  EXCELに長けた方、お教えください。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

VBAとSQLの組み合わせでよければ 後記のコードでいかがでしょうか。 なお、 シートの1枚目が集約先であること、 有効なレコードは、1列目が必ず埋まっていることが前提です。 Option Explicit Sub Sample()    Dim SQL As String  Dim cn As Object  Dim rs As Object  Dim i As Long  Dim j As Long  Dim ShName As String  Dim LastRow As Long    '出力先をクリアー  ThisWorkbook.Sheets(1).Cells.ClearContents    'SQL環境定義、DB接続  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1"  cn.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name    '2枚目シートから末尾シートまで繰り返し  For i = 2 To ThisWorkbook.Sheets.Count      ShName = ThisWorkbook.Sheets(i).Name     'SQL全文を組み立て   SQL = "SELECT *" & vbCrLf   SQL = SQL & "FROM [" & ShName & "$]" & vbCrLf   'SQLを実行   rs.Open SQL, cn   With ThisWorkbook.Sheets(1)    '列名を出力    If i = 2 Then     For j = 0 To (rs.Fields.Count - 1)      .Cells(1, j + 1).Value = rs.Fields(j).Name     Next j    End If        '結果セットを出力    If i = 2 Then     .Cells(2, 1).CopyFromRecordset rs    Else     LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1     .Cells(LastRow, 1).CopyFromRecordset rs    End If   End With      rs.Close      Next i  '後処理  Set rs = Nothing  cn.Close  Set cn = Nothing   End Sub  

h6322813
質問者

お礼

うまくできました。 ありがとうございます。

その他の回答 (5)

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.6

[No.5]で提示した数式に必要な範囲名リストです。 添付図参照(Excel 2019)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↓↓↓↓↓↓↓↓↓↓↓↓↓

h6322813
質問者

お礼

ありがとうございます。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.5

Sheetまとめ において、 =OFFSET(INDIRECT("Sheet"&(1+INT((ROW(A1)-1)/7))&"!"&$A$1),MOD(ROW(A1)-1,7),COLUMN(A1)-1) なる配列(CSE)数式を入力したセル A2 を右2列に入力後、範囲 A2:C2 のフィルハンドルを下方にドズズーッと(22行目まで)ラッグ&ペースト

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

VBAでも、人間の手作業でやるとすると、やりそうなやり方(思考方法)に倣う方法でできます。 コード行数もまあまあ小数です。 パワークエリなど高度なソフトでもできるでしょうし、WEBにフリーソフトもあると思います。 Excelは、表(今回は複数)の組み換えに当たる機能がないように思います。ただ統合という機能がありますが。 ーー 例データ Sheet1 氏名 住所 買上額 山田 東京 100 近藤 大阪 200 木村 横浜 300 Sheet2 氏名 住所 買上額 大島 大阪 500 鳥居 東京 600 熊野 横浜 700 Sheet3 氏名 住所 買上額 山本 名古屋 1100 西 京都 1200 南野 東京 1300 安井 大阪 1400 ーーー 見出し行は全シート同じ(列データは同じ性格のものでないと集約は意味がない。また、1行だと、しています。) 標準モジュールに Sub test01() For Each sh In Worksheets 'MsgBox sh.Name MsgBox sh.Index '集約シートは集積処理を除外 If sh.Name = "Sheet4" Then GoTo p1 Set r = sh.Range("A1").CurrentRegion If sh.Index = 1 Then '先頭シートは 'CurrentRegion そのまま範囲指定 Set r2 = sh.Range("A1").CurrentRegion r2.Copy Worksheets("Sheet4").Cells(1, 1) 'Sheet4の先頭から貼り付け Else '先頭シート以外は Set r = sh.Range("A1").CurrentRegion '---CurrentRegionから見出し行の削除した範囲指定 Set r2 = r.Resize(r.Rows.Count - 1).Offset(1, 0) '---集約シートの現最終行+1以下に貼ろ付け lr = Worksheets("Sheet4").Range("A100000").End(xlUp).Row + 1 r2.Copy Worksheets("Sheet4").Cells(lr, 1) End If p1: Next End Sub と作って、実行。 結果 Sheet4 氏名 住所 買上額 山田 東京 100 近藤 大阪 200 木村 横浜 300 大島 大阪 500 鳥居 東京 600 熊野 横浜 700 山本 名古屋 1100 西 京都 1200 南野 東京 1300 安井 大阪 1400 Sheet4というシート名は、本番データでは、白紙シートを1つ作り、そのシート名に変えてください。

h6322813
質問者

お礼

ありがとうございます。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

> パワークエリで出来そうな気もするのですが できるでしょう。 [データの取得]→[ファイルから]→[ブックから]で [複数のアイテムの選択]にチェック入れて Shift押しながら まとめシート以外のシートを選択→クエリを接続のみで読み込み [データの取得]→[クエリの結合]→[追加] [3つ以上のテーブル]を選択し Shift押しながらクエリを指定 →[追加]→[OK] 以上 > ちなみに実作業で使用するファイルはシート数は100くらいあり 「Excelに長けた」人はこんな表の作り方をそもそもしません。 根本的には 表を「シート」で分ける ワープロ的な発想から頭を切 り替えないと どこかで立ち行かなくなります。

h6322813
質問者

お礼

ありがとうございます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

新しいエクセルのシートに、添付ファイルの、ファイル名(Book1.xlsx)+シート名(A商店~C商店等)+セル(A1~C200等) の全リストを作って、引用のデータ式(=[Book1.xlsx]A商店!A1等)を&等の関数で作り、複数シートのデータを引用できるようにして、1シートにまとめてみて下さい。なお、シート数が100あるのでしたら、パソコンの性能によっては、時間がかかるかもしれません。

関連するQ&A

  • Excelで複数のワークシートのデータを1つのワークシート

    Excelで、複数のワークシート(22ワークシート)のデータを1つのワークシートにまとめたいのですが、関数か何かで出来る方法はないでしょうか?.1ワークシートの行数は、まちまちですが、平均6000行ほどあります。

  • 複数のエクセルファイルとシートからデータ抽出したい

    すみませんが教えてください! 複数のエクセルファイルがあり、それぞれに複数のシートがあります。 (ファイルによってシート数は異なります) そのすべてのファイル/シートから、C列の最後の行のデータを抽出し、集計ファイルに書き出したいのです。 書き出しのフォーマットは3セル使用して、ファイル名、シート名、データとしたいです。 すみませんが、よろしくお願いいたします。

  • 異なるブックのデータを同一シートに貼り付けるには

    いつもお世話になっております。 異なるExcelブックのデータ(リスト形式)を一枚のシートに貼り付けるにはどのようなプログラムを組めばよろしいでしょうか。 ・ExcelファイルはOutlookの受信メールにひとつずつ添付されており、各ブックにはシートが一枚のみがあるものとします。 ・受信メールは全て特定のメールフォルダに保存されています。 (1)受信メールの添付のExcelファイルを開く (2)シートの2行目から5行目を選択してコピー (3)"統合"シート(別ファイル)に貼り付け (4)Excelファイルを閉じる (5)次の受信メールのExcelファイルを開いて2行目から5行目をコピー→"統合"シートの最終行の次の行に貼り付け→ファイルを閉じる。 (6)メールフォルダの中の全ての添付ファイルについて(5)を繰り返す。 なお、ファイルを開かなくても貼り付け作業ができる場合にはそちらでお願いします。 よろしくお願いします。

  • Excel2013 複数ファイルシート別結合

    複数のエクセルファイルがありシート名A、B、C、D、Eとあります。 B8からG8まで題名がありB9からデータが入ってます。 B9からのデータ行数は毎回違います。それを同じシート名ごとに貼り付けたいです。 エクセル1エクセル2エクセル3 全シート名があるエクセル1のデータの下に貼り付けていきたいです。エクセル2とエクセル3を ファイルごとにあるシートは変わります。ないシートがあったりします。 それをマクロでやりたいです。よろしくお願いします。

  • エクセル:複数シートの一括処理

    お世話になります。 エクセルで1つのブックに複数のシートがあります。 書式は同じですが行数がそれぞれ違います。 A列で、データが入力されている一番下のセルの次の行から、エクセルの最終行である65536行までの行を全て選択して「削除」をしたいのです。(行の削除)しかも全シート一括で。 A列でデータが入っている一番下のセルがA550だった場合、551行~65536行までを全て選択→削除を行う。 これらの作業をするためのマクロを教えてください。

  • Excelの複数ブックにあるデータの結合(統合?)

    複数の人から同じフォームに入力をした表が送られてきます。 【表サンプル】 A1 記入者名 2行目に項目が B1 空白 B2 購入日付 B3 金額  のように並んでいます。 3行目からデータが入っており、記入者によって入力する行数が異なります。(最大データ数は20件) 複数名が入力してくるこの表のデータを 1つのシートにまとめたいと思っています。 (各データの記入者情報がわかるようにしたいです) まとめた後、さらに「購入日付」の月ごとのシートに分けることができたら更に助かります。 このような作業をするにはどうしたらよいでしょうか。大変困っています。 わかりづらくて申し訳ありませんが、どうぞよろしくお願いいたします。

  • Excel VBA 複数シートを各シート名で保存

    Excel VBA で、複数シートを各シート名で保存したい場合はどうすればいいでしょうか? シート名が、[フォーム] [A社] [B社] [C社] [D社] … というBookがあります。 [フォーム]シートを除く他のシートを、シート名をそのままファイル名にして、 それぞれ別ファイルで保存する場合、どのように記述すればいいのか どなたかおわかりになりましたら、教えてください。 よろしくお願いします。

  • 複数のシートから重複するデータを別シートに抜き出す

    こんにちは。 Excel2007です。 複数のシート(現在はSheet1からSheet4ですが、最終的にはSheet10ぐらいまでになります)に蔵書データが入っています。 A列21行目から作者名、B列21行目から本のタイトル、C列21行目からページ数と以下、値段、ISBNなどJ列まで蔵書データが入っています。本棚ごとにSheet1、Sheet2と分かれて入力されています。 この複数のシートから本のタイトルが重複するものを別シートに抜き出すにはどうしたらいいでしょうか? 重複データを削除するマクロや関数は探せたのですが、複数のシートにまたがっている場合は探しきれませんでした。 何かいい解決方法があればご教授下さい。

  • 複数のエクセルファイルのシートを1枚のシートに

    100個以上のエクセル(CSV)ファイルの1枚目のシートに同じ書式のファイルが多数(100個程度)有るのですが、これを1枚のシートにまとめる方法は無いのでしょうか? 一枚のシートの行数は数行~50行以下で、全部のデータを1枚に纏めてデータ処理したいのですが、一括は無理でも出来るだけ簡単に出来る方法をお願いします。 尚、当方VBAは不得手で、あまり長いと(長くなくても)動くまでの試行錯誤の手間ひまで100枚のファイルのシートへのコピペが終わってしまう程度の実力ですので、ご配慮?お願い致します。

  • エクセルのマクロで複数のシートのコピー

    エクセル初心者です。 私の場合、3から5社のフォルダが作ってあり、それぞれ、エクセルで、日々の入出庫の管理&集計をしています。 3社のフォルダより、指定ファイル・シート内のデータをピボットテーブル用集計シートにコピー貼り付けしたいのです。 ピボットテーブル機能で複数のシートを選択するのはシート数が多すぎて手間。 マクロによって、集計シートにまとめてから、ピボットテーブル機能を使いたい。 各社シートのフォームは同じ.。 日付けを指定してコピー貼り付けしたい。 集計シートに各社連続で貼り付けがしたい。 集計シートの最初の行だけにタイトルを表示したい。 なるべく、フォームの行・列幅は変更しないようにしたい。 貼り付けたデータのユーザー名がわかるようにしたい。 なにとぞ、お力をお貸しください。 よろしくお願いいたします。 エクセル2003

専門家に質問してみよう