• ベストアンサー

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

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

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.3

使い方。 ワークブックを1つ作って、このマクロをコピぺ 結合したいフォルダに保存してから実行してください。 (フォルダ名とファイル名を確定するために、実行前に保存する必要があります。) ' Option Explicit ' Sub Macro1() '   Dim FileName As String '   ChDrive ThisWorkbook.Path   ChDir ThisWorkbook.Path   FileName = Dir("*.xls*") '   Do While FileName > "" '     If FileName <> ThisWorkbook.Name Then       Convate FileName     End If     FileName = Dir   Loop End Sub ' Sub Convate(FileName As String) '   Dim Book As Workbook   Dim Sheet As Worksheet   Dim SheetName As String   Dim MaxRow As Long   Dim MaxCol As Integer '   Set Book = Workbooks.Open(FileName) '   For Each Sheet In Worksheets     Book.Activate     Sheet.Select     SheetName = Sheet.Name     With ActiveSheet.UsedRange       MaxRow = .Rows(.Rows.Count).Row       MaxCol = .Columns(.Columns.Count).Column     End With     [A1].Resize(MaxRow, MaxCol).Copy     ThisWorkbook.Activate     On Error GoTo 100     Sheets(SheetName).Select     On Error GoTo 0     MaxRow = [A1].SpecialCells(xlLastCell).Row '     If MaxRow > 1 Then       MaxRow = MaxRow + 2     End If     Cells(MaxRow, "A").Select     ActiveSheet.Paste   Next Sheet   Application.DisplayAlerts = False   Book.Close   Application.DisplayAlerts = True   Exit Sub ' 100 '   If Err = 9 Then     Sheets.Add after:=ActiveSheet     ActiveSheet.Name = SheetName     Resume   End If   Error Err End Sub

meronsodanomu
質問者

お礼

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

その他の回答 (2)

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

画像ファイルがぼやけてよく見えない。 ーー >複数のエクセルファイルがあり 同一フォルダ内にあるのか、別フォルダにあるのか、書いてないということは、 質問者は、この質問を質問するレベルではないと思われる。丸投げの回答コードの丸写しをせざるを得ない状況だろう。 この質問は何回もここに出ている。 ーー Vbscript(というスクリプト言語)を勉強しForEachでファイル名(ブック名)を1つずつ捉え、そのブック名でエクセルブックをOpenして、そのブックのシート名もForEachで1つづつ捉えて、Activateして、そこでコピーして、1つの決めたブックの決めたシート(集約する受け皿シート)に、上から張り付けていく。 前回までに張り付けたデータの最終行は、VBAでよく使われるEnd(xlUp)でとらえられるから、その次行を起点にしの下部に張り付ける。 Sub test02() lr = Range("A100000").End(xlUp).Row MsgBox lr End Sub この既作成シートごとに繰り返す。 ーー ブックの捉え方 Googleで「フォルダ ファイル名 一覧 エクセルで照会すること (1)Dir法 (2)VBscriptでFor Each法 がある。 Googleで「vba フォルダ ファイル エクセル 一覧」で照会 その中にたとえば(2)の方法で Sub Sample3() Dim f As Object, cnt As Long With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder("C:\Sample").Files cnt = cnt + 1 Cells(cnt, 1) = f.Name Cells(cnt, 2) = f.DateCreated Next f End With End Sub ーーーー Excelブックに限定方法を勉強(拡張子で)のこと ーーーーー シートの捉え方 Sub test01() Dim sh For Each sh In Sheets MsgBox sh.Name ’--確認用 Next End Sub ーー 集約したとき、余分な項目、行、空白行があるときはVBAで省けるか勉強が必要。 元データの状況によっては、VBAコード作成に手数がかかる、とかうまくロジックが組めない場合がある。そういう問題点を注目できてないのは、まだエクセルやそのVBAはじめたばかりだろうと察せらる。 ーー 集約ブックやシートはForEachの繰り返しの中で対象にならないようにスキップする必要がある。

meronsodanomu
質問者

お礼

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

回答No.1

> それをマクロでやりたいです。よろしくお願いします。 これは「作ってください」ってことですか? きっと私の勘違い。 「手順を教えて」だと思うので、以下どうぞ。 ・「エクセル1」を開いておく ・繰り返し処理1  フォルダを指定し、フォルダ内の「エクセル1」以外について  ・開く  ・繰り返し処理2   ブック内の各シートについて   ・シート名を照合   ・必要な範囲をコピー   ・エクセル1の同じ名前のシートの(行方向)末尾に貼り付け   ※エクセル1に同名のシートが無かったらシート追加(?)   ・閉じる  ・繰り返し2終了 ・繰り返し1終了 がんばって作成くださいませ。 どうでもいい話ですが・・ 添付されている画像、全く読めません。 辛うじて読める範囲での感想ですが、 「どうして“日別”でシートを組んじゃったかな。」 と心底思います。

meronsodanomu
質問者

お礼

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

関連するQ&A

  • 複数のブックを新しいブックのSheet1にまとめたい

    教えてください。 「A」「B」「C」「D」「E」「F」「G」 と言った名前のエクセルファイルがあります。 実際は約50個ありますが・・・。 それぞれ、Sheet1にのみ同じフォーマットですが、行数というか、件数が異なります。 新しいエクセルブックのSheet1にA」のデータの下に「B」のデータを貼り付けるという風に、「A」~「G」をまとめて一つのシートにまとめたいです。コピペではなくマクロでできるということを知りました。 毎月作業することになるので、マクロを組んでおきたいと思っています。 しかし、マクロは単純作業を記録して実行するというような基本的なことしかわかりません。 専門的用語ではなく、 (1)ツールをクリック (2)すべてのブックを開いておく (3)Visual Basicをクリック などというように、手順を教えていただけないでしょうか? よろしくお願いします。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • シートを複数持つExcelファイルを複数ファイル結合する方法

    シートを複数持つExcelファイルを複数ファイル結合する方法 ○○○工事・▲▲▲工事・■×○工事・・・・と複数のEXCELファイルが有り そのファイルの中には共通してA・B・C・D・・・・シートがあります。 各EXCELファイルの同じ名前のシートを取り出して1つのファイルにしたいと思っています。 1つのファイルにした時、各シート名が抜き出したファイル名になるようにしたいです。 50ファイル以上ありシート数が20ある為、なんとかいい方法をお教え下さい。

  • エクセルで複数ファイルのシートから一つのシートへ結合したい

    エクセル上で、 Aフォルダ内にファイルBook1~数十個があり、Book1にはシート名「sh1」、Book2にはシート名「st2」のみがぞれぞれあります。シート内のデータ数はバラバラで何行のデータがあるか不明ですが、列数は同一です。 このファイルすべてを開かずに、今開いている、「加工.xls」のsheet1にまとめたいと思っています。(sh1の下にsh2、その下にsh3・・・を繰り返して、「加工.xls」のsheet1に貼り付ける。行間は空けず一覧表にする。フォルダ内のファイルが無くなったら終了する。)こんな感じのをマクロでやりたいと思っています。 ファイルを開かないで行う方法は、何とか過去の質問を調べてApplication.ExecuteExcel4Macroを使ってやろうとしていますが、応用が利きませんでした。開いていないファイルの最終行をどう取得選択してsheet1に持ってくればよいか分からず悩んでいます。 よろしくお願いいたします。

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

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

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

  • Excelの複数のシートを一つのシートに結合したい

    一つのエクセルファイルに複数のシートがあります。 このシートを一つのシートにまとめる効率の良い方法を教えてください。 なお、私は、マクロ等の使用方法がわからないため、マクロでご回答 される場合は、お手数ですが、手順を記載してください。 宜しくお願い致します。

  • 別シートへ飛ばす

    エクセルの関数またはマクロでどうしたらできるのでしょうか? 内容ですが、元データはsheet1にA4に整理番号があり、B4に識別番号があり、C4に名前があり、D4にフリガナがあり、E4に区分があります。 ここでE4セルにある数種類(1~6)の区分から、1と2であれば、その左のセルの情報A4B4C4D4がsheet2のA4~E4へ上から順番に埋まっていくように飛ばすにはどうしたらいいでしょうか? たくさん羅列してあるデータから条件を満たしている人が別シートの上から順に埋めていきたいのです。 宜しくお願いします。

  • エクセルで、条件にあう複数の行を別のシートに抽出する

    《どなたか、お教え下さい》   エクセルで、条件にあう複数の行を別のシートに抽出してまとめる。 「sheet1」の下記の基本データを「sheet2」に「得意先」ごと「日付」の早い順にまとめたいのでが。関数を使ってできないものか、どなたかお教え下さい。「マクロ」や「Access」は使用したことがないので、関数を使ってやりたいと思いますが、できるものでしょうか。よろしくお願いします。 sheet1 番号 得意先 日付 商品名 商品詳細 金額 備考 1   A 2   B 2   B 4   D 5   E 6   F 2   B 3   C 5   E   A    B  番号  得意先   1   A      2   B   得意先名は、番号を入力することで表示されるように   3   C   関数「VLOOKUP」を使って表示させるようにしていま   4   D   す。    5   E   6   F  

  • エクセルの各シートのデータを自動的に複写する方法

    現在、エクセルでデータの管理を行なっていますが、複数のシートから必要なデータのみ(「郵便」と入れた列)を、特定のシートに複写する方法の計算式をご教示ください。 エクセルデータのシート例示状況は次のとおりです。 (1) sheet1      A        B    C     D     E   F 1 (株)東京 1000  500 200  100 郵便 (2) sheet2      A        B     C    D     E 1 神奈川県庁 50   20  100  郵便 (3) sheet3(このシートに各シートのデータに「郵便」と入れた業者名だけを順次下のセルに自動複写していく)    A        B     C    D    E 1 (株)東京 2 神奈川県庁 このように何とかならないか考えています。誠に申し訳ありませんが、一連の「計算式と手法」をご教示ください。お願いします。 やっぱり「マクロ」しかないですよね。(マクロはかなりの初心者です) なお、エクセルは2003です。 重ね重ねお願いします。

専門家に質問してみよう