複数のシートをまとめる方法とシート順序のバラバラになる問題について

このQ&Aのポイント
  • 複数のブック内のシートを別の1つのブックのSheet1にまとめる方法を教えてください。実際には12個のブック内には「振替伝票1月」「振替伝票2月」などの共通のシートがあります。また、複数のブックのシートの順番を正しくまとめる方法も知りたいです。
  • 「現金」だけでなく「備品」「雑費」なども同じブックの別のシートにまとめたいです。調べてみた結果、解決策が見つからなかったため、お知恵をお借りしたいです。
  • 上記の問題について、サンプルコードを示しましたが、ファイルの順番に関する説明を見ても理解できませんでした。ご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

複数のシートをまとめるとシートの順番がバラバラに。

教えてください。初心者です。 1つ目。 http://okwave.jp/qa/q4225063.html を参考にさせていただき、複数のブック内のシートを別の1つのブックのSheet1にまとめて書き出しました。 実際は「振替伝票1月」「振替伝票2月」・・・・「振替伝票12月」と12個のブック内に 「現金」「備品」「雑費」などの共通のシートがあります。 12個のブックの「現金」をSheet1に書き出しをしたのですが、上から「振替伝票8月」の「現金」、「振替伝票5月」の「現金」・・・と順番がバラバラに書き出されます。 「振替伝票1月」「振替伝票2月」・・・・「振替伝票12月」と12個を順番に書き出すにはどうしたらよいでしょうか? 色々調べましたがわかりません。 「Dir関数が返すファイルの順番」の説明のサイトを見つけたのですが、さっぱりわかりませんでした。 Sub Sample1() Dim buf As String, i As Long Dim j buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls") Do While buf <> "" Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf Sheets("現金").Range("A1:J1000").Copy ThisWorkbook.Activate Range("A65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False buf = Dir() Loop End Sub 2つ目。 「現金」だけでなく「備品」「雑費」なども「現金」と同じブックの「Sheet2」「Sheet3」に書き出したいのですが、いろいろ調べてみるのですがわかりません。 ご教授の程、宜しくお願いいたします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

> Workbooks.Open MyDir & "\" & buf > の部分が実行エラーになります。 > BOOK1のSheet1のA1セルに「C:\Users\***\Desktop\振替え」と入力してます。 階層が深いところだと buf = "振替伝票" & MyFileCount & "月" & ".xls" Workbooks.Open MyDir & "\" & buf がダメみたいですね。 ちょっとファイルを開く回数が必要以上になっていたのでそれも修正して Sub Sample1() Dim MyDir As String, buf As String, MyFileCount As Integer, MySheetCount As Integer Dim MyFileName As String MyDir = Sheets("Sheet1").Range("A1").Value For MyFileCount = 1 To 12 buf = "振替伝票" & MyFileCount & "月" & ".xls" MyFileName = MyDir & "\" & buf Workbooks.Open MyFileName For MySheetCount = 1 To 3 Select Case MySheetCount Case 1 Sheets("現金").Range("A1:J1000").Copy Case 2 Sheets("備品").Range("A1:J1000").Copy Case 3 Sheets("雑費").Range("A1:J1000").Copy Case Else End Select ThisWorkbook.Activate With Sheets("Sheet1" & MySheetCount) 'With Sheets(MySheetCount) .Activate .Range("A65536").End(xlUp).Offset(1, 0).Select .Paste .Range("A1").Select End With Workbooks(buf).Activate Next MySheetCount Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False Next MyFileCount End Sub

mayumi040
質問者

お礼

ご回答ありがとうございます。 お返事が遅くなり、申し訳ございません。 出来ました。感謝です! 最後までわかりやすい回答をしていただきましてありがとうございました。

その他の回答 (5)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

寝ぼけてきました。 With Sheets("Sheet1" & MySheetCount) With Sheets("Sheet" & MySheetCount) にしてください。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

たびたび追加ですみません With Sheets("Sheet" & MySheetCount) を With Sheets(MySheetCount) にした場合 MyDir = Sheets("Sheet1").Range("A1").Value のところも MyDir = Sheets(1).Range("A1").Value もしくは MyDir = Sheets("実際のシート名").Range("A1").Value に変更してください。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

すみません iとjが違ってました 訂正です 紛らわしいのでiとjをやめました。 Sub Sample1() Dim MyDir As String, buf As String, MyFileCount As Integer, MySheetCount As Integer MyDir = Sheets("Sheet1").Range("A1").Value For MyFileCount = 1 To 12 For MySheetCount = 1 To 3 buf = "振替伝票" & MyFileCount & "月" & ".xls" Workbooks.Open MyDir & "\" & buf Select Case MySheetCount Case 1 Sheets("現金").Range("A1:J1000").Copy Case 2 Sheets("備品").Range("A1:J1000").Copy Case 3 Sheets("雑費").Range("A1:J1000").Copy Case Else End Select ThisWorkbook.Activate With Sheets("Sheet" & MySheetCount) .Activate .Range("A65536").End(xlUp).Offset(1, 0).Select .Paste .Range("A1").Select End With Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False Next MySheetCount Next MyFileCount End Sub もし、シートの左端のシートから順番にコピーされていけばいいのでしたら (シート名がSheet1とかでなくどんな名前になっても左端から順番にコピーされます) With Sheets("Sheet" & MySheetCount) を With Sheets(MySheetCount) に変更してください。

mayumi040
質問者

補足

ご丁寧な回答ありがとうございます。 お返事が遅くなってすいません。 Workbooks.Open MyDir & "\" & buf の部分が実行エラーになります。 書き込むブックはBOOK1という名前になってます。 BOOK1のSheet1のA1セルに「C:\Users\***\Desktop\振替え」と入力してます。 振替伝票1月~振替伝票12月のブックは「振替え」という名前のフォルダーに入れてDesktopに置いています。 このあたりが間違っているのでしょうか? よろしくお願いいたします。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

追加補足です。 Dim MyDir As String, buf As String, i As Integer ここに j As Integer を追加してください。忘れてました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Sub Sample1() Dim MyDir As String, buf As String, i As Integer MyDir = Sheets("Sheet1").Range("A1").Value For i = 1 To 3 For j = 1 To 12 buf = "振替伝票" & j & "月" & ".xls" Workbooks.Open MyDir & "\" & buf Select Case i Case 1 Sheets("現金").Range("A1:J1000").Copy Case 2 Sheets("備品").Range("A1:J1000").Copy Case 3 Sheets("雑費").Range("A1:J1000").Copy Case Else End Select ThisWorkbook.Activate With Sheets("Sheet" & i) .Activate .Range("A65536").End(xlUp).Offset(1, 0).Select .Paste .Range("A1").Select End With Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False Next j Next i End Sub こんな感じでいかがでしょう。

関連するQ&A

  • 複数のExelbookを1シートにまとめるVBA

    Accessクエリから出力したファイルをフォルダへ格納し、Excelbookを1つのExcelへまとめています。 しかし、複数の人間がExcelへ出力する為、上書きされないよう、運用上、Accessからの出力ファイル名がExcel出力時自動的に変更されるようにいたしました。(クエリ名&日付時刻) すると、それに合わせExcelシート名も変更されてしまう為、下記のVBAが使用できなくなってしまいました。 出力されるExcelは1シートのみにデータが入っています。 フォルダ内にある全book・全シートのデータを1シートに統合、もしくは"シート名"を指定せずに複数ファイルの1シート目を1つのExcelにまとめる事は可能でしょうか? どなたかご教授をお願いいたします。 Sub Sample1() Worksheets("Sheet2").Activate Dim buf As String, i As Long Dim j buf = Dir(Sheets("sheet1").Range("A1").Value & "\*.xls") Do While buf <> "" Workbooks.Open Worksheets("sheet1").Range("A1").Value & "\" & buf Sheets("シート名").Range("A2:AL1000").Copy ThisWorkbook.Activate Range("A65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False buf = Dir() Loop End Sub

  • シートを別のブックに移動させたいのですが、

    シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

  • シートを別のブックに複数自動コピー

    初質問です。よろしくお願いします。 マクロを使って、あるブックのシート(20から50枚程度)を、別の貼り付け先のブックに自動的にコピーしようとすると、10回をすぎたあたり(必ずしも一定せず)で 「実行時エラー'1004': WorksheetクラスのCopyメソッドが失敗しました。」 というエラーと共にマクロが止まり、デバッグしようとすると 「ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート")」 のところで止まっています。 マクロの記述内容は以下の通りです。 Sheets("貼り付け元シート").Activate ActiveSheet.Copy After:=Workbooks("貼り付け先ブック.xls").Sheets("○○シート") Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("A1").Select Windows("貼り付け元ブック.xls").Activate ・・・以下貼り付け元シートを変えつつ複数回繰り返し これができる様になれば非常にラクになるので、ぜひご教授願います。

  • マクロ シートの順番を認識してシートをアクティブに

    シート名に反応して、シートをアクティブにするマクロは分かるのですが、 シートの順番を元に、アクティブにするマクロを実行したいです。 例えば、 1枚目のシートに あああ、2枚目のシートに いいい、3枚目のシートに ううう と名前を付けているブックがあるとして、あああ のシートをアクティブにしたいとき、 Sub あああ のシートをアクティブにする() Sheets("あああ").Activate End Sub としたいわけではなく、「1枚目だからアクティブにした」 といったマクロを実行したいと思っています。

  • Excel VBA インデックスが有効範囲にない

      よろしくお願いします。 Excel VBA 初心のものです。 プログラムを作ってみたのですが、 「インデックスが有効範囲にありません」となってその先に進めません。 ソースですが ------------------------------------------------------ Private Sub CommandButton1_Click() Dim buf As String, cnt As Long Dim TMP As Variant Const Path As String = "D:\Excel\sample\" buf = Dir(Path & "*.xls*") Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = FileDateTime(Path & buf) Cells(cnt, 3) = TMP buf = Dir() Loop End Sub ------------------------------------------------------ エラーになる箇所は Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value のところです。 このプログラムで何をしたいかと言いますと DドライブのExcel>sample というフォルダの中にある ・すべてのエクセルブック名(ファイル数は3個)と、 ・そのブックの作成日時と、 ・testdataというシート(各ブックに必ずあるシートです)のセルA1に入っている値 を実行ファイルのSheet1に書き出す、 というものです。 プログラムの実行ファイルはExcelフォルダ直下にあります。 どこが問題でエラーになっているのか分かりません。 ご指南よろしくお願いします。   

  • 複数のシートで各シートをアクティブについて

    複数(10個ほど)のシートで各シートをアクティブにして次のようなコードを実行するとシートが次々と代わって表示されます。シートを1に固定しながら出来る方法はありませんか Worksheets(SN).Activate Sheets(SN).Cells(gyou, 24).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Cells(gyou - (ma1 - 1), 22), _ Sheets(SN).Cells(gyou, 22))) Worksheets(SN).Activate このコードを外すとエラーになります

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • VBAの構文過ち箇所指摘お願いします。

    まだまだVBA初心者です。 あるブックに2番目に開いたブックの一部を選択し、図のコピーで貼り付けるというものですが、最初の Workbooks(2).workshees(Sheets.Count).Activate でエラーが出ます。 2番目に開いたブックの一番右のシートの中の一部のセルを選択したいのですが、ご指摘おねがいします!! 以下その構文です。 Sub 2番目に開いたブックの貼り付け() On Error GoTo HandleErr Workbooks(2).workshees(Sheets.Count).Activate ActiveWindow.DisplayGridlines = False Range("A1:B2").Select Selection.CopyPicture Appearance:=xlScreen,Format:=xlPicture Workbooks(1).Activate Workbooks(1).Worksheets(Sheets.Count - 1).Range"B41").Select     ・     ・     ・     間省略 Exit Sub HandleErr: MsgBox "2番目のブックが開かれておりません!!" End Sub

  • マクロを教えてください

    同じフォルダ内にあるXlsブックのあるSheetのデータを他のBookにコピーして貼り付けて貼り付けた側のBookで加工したいのですがうまくマクロが組めません。 Bookを共有で使っているので困っています。 Sub ワードアート1_Click ' ActiveWindow.ScrollWorkbookTabs sition:=xlLast Workbooks.Open ("販売管理表み.xls") Sheets("在庫一覧").Select Cells.Select Range("A1").Activate Selection.Copy Windows("完成在庫.xls").Activate Sheets("完成在庫一覧").Select Range("A1").Select ActiveSheet.Paste End Sub って書いてみましたが、Workbooks…のところでエラーになってしまいました。(TOT)初心者ですみません。教えてください。

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。

専門家に質問してみよう