• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数ファイルにある特定のシートを1つにまとめたい)

複数ファイルにある特定のシートを1つにまとめる方法

このQ&Aのポイント
  • エクセルで複数ファイルにある特定のシートの特定した範囲を1つのファイルにまとめる方法を調べています。
  • 1つのワークシートしかない場合の複数ファイルをまとめるマクロは見つけることができました。
  • 複数のシートから特定のシートの特定した範囲を1つにまとめる方法を教えてください。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.6

> 同じフォルダにあるファイルをコピーしたい場合は > どのコードを直せばいいのでしょうか? あれ、おかしいですね。このマクロは同じフォルダにある全ての*.xlsファイル(自分自身を除く)以外をコピーして、その他のフォルダのファイルはいじらないのですが。 > このままだと関係ないファイルまでコピーしようとして > >Workbooks(FileName).Sheets("B").Range("A1:Z500").Copy > の部分でエラーがでてしまうので・・・。 確認していただきたいのですが、Excelファイルは同じフォルダにコピーするブックと、まとめ用ブック以外にはありませんか? (要は同じフォルダに「B」という名前のシートを持たないファイルがあると、上記の部分でエラーになるのですが、上のマクロはそういうファイルはないという前提なのです) もし同じフォルダにあるはずの「Bシート」を転記する処理がぜんぜん行われてないとなると、強制的にフォルダの位置を指定する、 Chdir "C:\My Documents" という行(フォルダ名は実際のフォルダ名に置きかえてください)を、 FileName = Dir("*.xls") の直前に挿入してみてください。

junichihirobe
質問者

お礼

ありがとうございます。 できました! このような作業をする場面が多いのでとても助かりました。m(__)m

その他の回答 (5)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

値で貼り付けですね。するとこういう感じでどうでしょうか。 Sub ブック集合()   Dim FileName As String   Dim c As Integer   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean   FileName = Dir("*.xls")   Application.ScreenUpdating = False   Application.DisplayAlerts = False   c = 0   Do While FileName <> ""     If FileName <> ThisWorkbook.Name Then       IsBookOpen = False       For Each OpenedBook In Workbooks         If OpenedBook.Name = FileName Then           IsBookOpen = True           Exit For         End If       Next       If IsBookOpen = False Then         Workbooks.Open (FileName)       End If       Workbooks(FileName).Sheets("B").Range("A1:Z500").Copy       ThisWorkbook.Sheets(1).Cells(c * 500 + 1, 1).PasteSpecial (xlPasteValues)       c = c + 1       If IsBookOpen = False Then         Workbooks(FileName).Close       End If     End If     FileName = Dir()   Loop   Application.DisplayAlerts = True   Application.ScreenUpdating = True End Sub

junichihirobe
質問者

お礼

ありがとうございます。 助かりました。 最後に 同じフォルダにあるファイルをコピーしたい場合は どのコードを直せばいいのでしょうか? このままだと関係ないファイルまでコピーしようとして >Workbooks(FileName).Sheets("B").Range("A1:Z500").Copy の部分でエラーがでてしまうので・・・。 申し訳ありません。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.3です。補足拝見しました。 > B(Bはみんな同じです)というワークシートのA1:Z500までの > データを新規のブックの1つのワークシートにまとめたいのです。 の「まとめかた」がよくわからないです。「まとめる」というのは「集計する」ではなくて、1つのシートにコピーする、ということでしょうか?3つブックがあって、それぞれのシートBのA1:Z500を、 ブック1→まとめシートのA1:Z500 ブック2→まとめシートのA501:Z1000 ブック3→まとめシートのA1001:Z1500 というように上から転記していけばいいのでしょうか? とりあえず、昨日似たようなマクロを書いたところなので、それを手直ししてみました。 ・まとめブックと同じフォルダ以外にある全ての*.xlsファイルを開き、シートBのA1:Z500をまとめブックの1枚目のシートに上からコピーしていきます。(1つめはA1:Z500にコピー、2つめはA501:Z1000にコピー...) ・開いたブックにBという名前のシートがない場合、マクロがエラーになります。 Sub ブック集合()   Dim FileName As String   Dim c As Integer   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean      FileName = Dir("*.xls")   Application.ScreenUpdating = False   c = 0   Do While FileName <> ""     If FileName <> ThisWorkbook.Name Then       IsBookOpen = False       For Each OpenedBook In Workbooks         If OpenedBook.Name = FileName Then           IsBookOpen = True           Exit For         End If       Next       If IsBookOpen = False Then         Workbooks.Open (FileName)       End If       Workbooks(FileName).Sheets("B").Range("A1:Z500").Copy _         ThisWorkbook.Sheets(1).Cells(c * 500 + 1, 1)       c = c + 1       If IsBookOpen = False Then         Workbooks(FileName).Close       End If     End If     FileName = Dir()   Loop   Application.ScreenUpdating = True End Sub

junichihirobe
質問者

補足

ありがとうございます。 助かります。 まとめるとは1つのシートにコピーすることです。 しかし、できればまとめブックと同じフォルダにあるファイルの シートBのA1:Z500をまとめブックの1枚目のシートに上からコピー して値を貼り付けという風にしたいのですが・・。 すべて貼り付けにしてしまうとリンクまで張り付いてしまうので。 何度もお手数をおかけしてしまって申し訳ないです・・。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

えっと、これは複数のブックにある複数のシートから、特定のシートの特定した範囲を1つにまとめたい、ということですか? 具体的な条件(どのシートのどの範囲をどのようにまとめるか)がわからないと適切なアドバイスは難しいですが、上の場合だと、 .Worksheets(1).Copy After:=ThisWorkbook.Worksheets(i%) の部分を、やりたい処理に書き換える必要があります。たとえば、   Dim s As Worksheet    For Each s In .Worksheets     If sが特定のシート Then       sの特定の範囲を、まとめるブックのどこかのシートのどこかのセルコピー     End If   Next みたいな処理が入るかと。

junichihirobe
質問者

補足

早速の回答ありがとうございます。 上の場合だとシートのコピーになってしまうのですが やりたいことはAからZまでのブックの B(Bはみんな同じです)というワークシートのA1:Z500までの データを新規のブックの1つのワークシートにまとめたいのです。 ブック名はそれぞれですが、シート名と範囲は一緒です。 はよくてその後は書き換えないといけないかなと・・・。 それがまったくわからないんです・・。 上の質問のマクロはテストで実行してみましたが エラーが出てできませんでした・・。 再度探してこのマクロだと最後まで実行できました。 しかし、シートごとのコピーなのでやりたいこととは 違います・・。 Sub ブック集合() Dim Wb As Workbook Dim Fname As Variant Dim i As Integer, j As Integer j = ThisWorkbook.Sheets.Count Fname = Application.GetOpenFilename("EXCELファイル(*.xls), *.xls", , , , True) If Not IsArray(Fname) Then Exit Sub Application.ScreenUpdating = False For i = 1 To UBound(Fname) Workbooks.Open (Fname(i)) Set Wb = ActiveWorkbook With ThisWorkbook Wb.Sheets(1).Copy , After:=.Sheets(.Sheets.Count) End With Wb.Close Next Application.DisplayAlerts = False For i = 1 To j ThisWorkbook.Sheets(i).Delete Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

おっと! シート全体ではなのですね 失礼しました <(_ _)>

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

マクロでないとだめなのですか? 保存先と移動元のブックを開いて 両ブック中でシート名の名前のダブりがないように調整して 移動元の移動させるシートのタブを右クリック 出てきたメニューの中から「移動またはコピー」を選択 出てきたウインドウの上方「移動先ブック名」のプルダウンから保存先ブック名を選択 その下方「保存先」より保存先ブック内でのシートの位置を選択 最下方「コピーを作成する」にチェックが入ってない状態のまま 「Ok」をクリックすると シートが移動します 以上を必要数繰り返せばまとめられますが これでは駄目ですか?

関連するQ&A

専門家に質問してみよう