VBAでブックの集計方法を教えてください

このQ&Aのポイント
  • 初心者がVBAを使ってブックの集計方法を探しているが、うまく作動しない。値だけをコピーして集計したいが、罫線やパターン、数式までコピーされたり、最後のシートだけ2重にコピーされるなど、意図しない動作が起きる。どの記述が間違っているか分からない。
  • H22.12月度のフォルダーにはA店~E店の集計ブックがあり、それぞれのシートから値をコピーして集計したい。しかし、セルの書式設定だけでなく、罫線やパターン、数式も一緒にコピーされたり、最後のシートだけ2重にコピーされるなど、予期しない動作が起きる。初心者なので、どのような記述が間違っているのかわからない。
  • VBAを使ってH22.12月度のフォルダーにあるA店~E店の売上一覧シートから値をコピーして集計する方法を探している。しかし、セルの書式設定だけでなく、罫線やパターン、数式もコピーされてしまったり、最後のシートだけ2重にコピーされるなど、うまくいかない。自分で本やネットで調べて作成したため、どの記述が間違っているのか分からない。
回答を見る
  • ベストアンサー

VBAでブックの集計の仕方を教えてください。

H22.12月度と言う名前のフォルダーにA店~E店と集計と言う名前のブックがあります。 集計のブックでA店~E店の集計をしてくるマクロを組んでいますが上手く作動しません。 集計のブックには、セルの書式設定をしていますので、A店~E店の売上一覧のシートから 値だけをコピーして集計したいのですが、罫線やパターン、数式までコピーしてきたり、 最後のE店だけ2重にコピーしてきたりと変な動作をします。 初心者で本やネットで調べながら作ったので、どこの記述がおかしくて、そうなるのかがさっぱりわかりません。 どなたか教えていただけませんでしょうか。よろしくお願いします。 Sub 集計() Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\H22.12月度\A店.xls" Sheets("売上一覧").Select Range("E5:Q24").Select Selection.Copy Application.WindowState = xlMinimized Windows("集計.xls").Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False If Range("E5").Value <> "" Then Range("E65536").Select Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If ActiveSheet.Paste Windows("A店.xls").Activate Range("E5").Select Application.CutCopyMode = False ActiveWindow.Close     ・     ・     ・(B・C・D店も同じ記述)     ・     ・   Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\H22.12月度\E店.xls" Sheets("売上一覧").Select Range("E5:Q24").Select Selection.Copy Application.WindowState = xlMinimized Windows("集計.xls").Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False If Range("E5").Value <> "" Then Range("E65536").Select Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If ActiveSheet.Paste Windows("E店.xls").Activate Range("E5").Select Application.CutCopyMode = False ActiveWindow.Close    Windows("集計.xls").Activate Application.WindowState = xlMaximized Range("E5").Select End Sub

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。おまけです。 サブルーチン化すると、コードが短くて済みます。ご参考まで。 testの方を実行させて下さい。 Sub test() testsub "C:\hogehoge","BookA.xls" testsub "C:\hogehoge","BookB.xls" 以下別の集計元ファイルについて同様に記述。 End Sub Sub testsub(myFolderName As String, myfileName As String) Workbooks.Open Filename:=myFolderName & "\" & myfileName Sheets("Sheet1").Select Range("B6:F25").Select Selection.Copy Windows("Book1.xls").Activate Sheets("Sheet1").Select Range("B6").Select If Range("B6").Value <> "" Then Range("B65536").Select '2003以前の場合 Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows(myfileName).Activate Application.CutCopyMode = False ActiveWorkbook.Close savechanges:=False End Sub

kumi4520
質問者

お礼

回答ありがとうございます 返事が遅くなってごめんなさい いろいろ試してみましたけど、なかなかうまく行かなくて、年末が近づいて他の事で忙しくなるし。。。 今年中には出来上がりそうに無いですけど、せっかく回答もらったのでなんとかしたいなとは思います。

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

q6370420で回答した者ですが、今日はたまたま家でごろごろしておりますので... 頑張っていらっしゃる様子がうかがえますので、最小限の助言に止めておきますが、 値複写のコードと、丸ごとコピーのコードをダブって実行してしまっております。 先に回答したのは、丸ごとコピーですので、値複写に差し替えてください。 それでは、健闘を祈ります。 Sub test() Windows("Book1.xls").Activate Sheets("Sheet2").Select Range("B6:F25").Select Selection.Copy Windows("Book2.xls").Activate Sheets("Sheet1").Select Range("B6").Select If Range("B6").Value <> "" Then Range("B65536").Select '2003以前の場合 Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If 'activesheet.pasteの代わりに値複写のコードを記述 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

関連するQ&A

  • 実行時エラーについて

    Konkon_mと申します よろしくお願いします エクセルの質問なんですが、今回ワークシートから別のワークシートに表と数値を貼り付けるマクロを作成したのですが終了時に、『実行時エラー'1004' WorksheetクラスのPasteメソッドが失敗しました』のエラーがでるのです 一応、コピー&貼り付けはきちんと終了しているようなのですがすごく気になります 作成したマクロを載せますので、わかる方がいらっしゃいましたら教えていただけないでしょうか? 宜しくお願いします ChDir "H:\A\B" Workbooks.Open FileName:="\\PRO800\Home Directory\B\B\コピー.xls" ActiveWindow.WindowState = xlMinimized Range("B3:D10").Select Selection.Copy ActiveWindow.WindowState = xlMinimized ActiveWindow.WindowState = xlNormal ActiveWindow.WindowState = xlMinimized Windows("コピー.xls").Activate ActiveWindow.WindowState = xlNormal Range("B3").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("B3:D10").Select Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("A1").Select ActiveWorkbook.Save ActiveWindow.Close ActiveWindow.WindowState = xlNormal Range("B3").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A3").Select ActiveWindow.WindowState = xlMaximized End Sub

  • 別ブックからのデータ取り込み

    下記の(1)(2)のマクロを(3)のコマンドボタンで実行させています。 (1)(2)を使用せずに(3)のコマンドボタンにまとめて記載したいのですが上手く出来ません。 また、(1)の"A:\あ.CSV"部分ですが、使用PCによってドライブが異なる場合があるります。セルC2に入力したドライブ名を反映させることはできないでしょうか? よろしくお願いします。 (1) Sub I()    Workbooks.Open Filename:="A:\あ.xls"    lngR = Range("B65536").End(xlUp).Row    Range("B2:B" & lngR).Select    Selection.Copy    Windows("か.xls").Activate    Range("B3").Select    ActiveSheet.Paste    lngR = Range("B65536").End(xlUp).Row    Range("B2:F" & lngR).Select    With Selection.Font     .Size = 8    End With     End Sub (2) Sub II()    Windows("あ.xls").Activate    lngR = Range("E65536").End(xlUp).Row    Range("E2:E" & lngR).Select    Selection.Copy    Windows("か.xls").Activate    Range("G3").Select    ActiveSheet.Paste    lngR = Range("G65536").End(xlUp).Row    Range("G2:G" & lngR).Select    Selection.Style = "Comma [0]"    With Selection.Font     .Size = 9    End With    Windows("あ.xls").Activate    ActiveWindow.Close   End Sub (3) Private Sub 取込_Click()    Application.ScreenUpdating = False    Protect UserInterfaceOnly:=True    Application.Run "I"    Application.Run "II"    Selection.Locked = False    Applicaion.ScreenUpdating = True   End Sub

  • このコードをダブルクリックにて、実行するには?

    ブック「集計」の「貼り付け元のワークシート」のどこかをダブルクリックして、ブック「集計E 」へ貼り付けたいのですが、どうも、うまくいきません。 1、このブック「集計E 」が、同フォルダで、同ウインドウにある場合。 2、別ウインドウにある場合も可能でしたら、ご教示下さいませ。 ちなみに、下記コードは、「貼り付け元のワークシート」内で、コピ&ペにて「行列の入れ替え」をしてから、再度、コピ&ペにて「集計E 」へ貼り付けております(他の方法を知りませんので)。 どうぞ、よろしくお願い致します。 ----------- Sub DoubleClick() Range("B3:M11").Select Selection.Copy Range("N3").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False Selection.Cut Windows("集計E.xls").Activate Range("B3").Select ActiveSheet.Paste Windows("集計.xls").Activate End Sub ----------

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • VBA作製ができません。どなたか教えてください。

    前回同じタイトルで質問させていただいた物を自分なりに本で調べて 作ってみました。しかし壁にぶつかりました。 Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select この式は7列目の一番下の空欄のセルを選択できる式のようですが、 指定した範囲のなかで7列目の一番下のセルを選択したいのですがどうすればいいでしょうか? つまり列だけじゃなく行も選択したいです。 教えてください。 こんな式を作りました。  もし式を簡単に効率よくできる方法があればアドバイス下さい。 If Range("G4").Value = SpecialCells Then Range("H4").Select Else Range("G4").Select Range("G4").Copy Windows("Book1.xlsx").Activate Range("G18:G26") = Selection.Areas.Count Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("D4").Select Range("D4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 4).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("E4").Select Range("E4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 5).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("H4").Select End If

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • オートフィルタをし選択・貼付をマクロにしたいのですが、対象データ表示される行が毎回違うのでうまくいきません。

    いつもお世話になっております。 どなたかご教示いただければ助かります。 ファイル(1)のデータの中からA行が830となっているものを、ファイル(2)のページ1の一番下の行に付け足し 同じようにファイル(1)からA行が1000となっているものを、ファイル(2)のページ2の一番下に付け足す という作業をマクロでしたいのですが、毎回830と1000がセルAの何行目に表示されるのかが異なっており、オートフィルタをかけた状態でマクロにするとマクロ作成時にたまたま表示されていた行数が指定されているので、別の日に違う行数をコピーしてしまい私が作成したマクロではうまくいきません。 どう変更すれば宜しいでしょうか? どうぞ宜しくお願い致します。 Workbooks.Open Filename:="mm.xls"    ←上記文でファイル(1) Sheets(DM).Select Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>*850*", Operator:=xlAnd, _ Criteria2:="<>*1000*" Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Rows("1:1").Select Selection.AutoFilter Windows("xx.xls").Activate  ←ファイル(2) Sheets("ll").Select   ←ページ1  ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="1000" Rows("3:3").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False Windows("xx.xls").Activate Sheets("pp").Select  ←ページ2 ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="850" Rows("2:2").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Windows("mm.xls").Activate ActiveWindow.Close End Sub

  • VBA 他のエクセルファイルデータを読み込む

    エクセルのVBAに関する質問です。 かじった程度の知識でがんばってはみたのですが、以下のことがどうしてもできません。 集計ファイルと、それぞれが入力するファイルがいくつか(具体的には1A.xls、1B.xls、2A.xls、2B.xlsといった数字とアルファベットの組み合わせ)あります。 入力ファイルに書かれているデータを集計ファイルに取り込もうと考えています。 入力ファイル名が(1.xls,2.xls・・・)の様に数字だけの取り込みはできました。 m = Val(UserForm2.TextBox1.Text) For i = 1 To m On Error GoTo myError Workbooks.Open Filename:="C:" & i & ".xls", UpdateLinks:=0 Range("f65536").End(xlUp).Activate Workbooks(i & ".xls").Activate Sheets("入力ファイル").Select Range("A3:X52").Select Application.CutCopyMode = False Selection.Copy Workbooks("集計ファイル.xls").Activate Sheets("DB").Activate Range("a65536").End(xlUp).Activate Selection.Offset(1).Select ActiveSheet.Paste Range("a65536").End(xlUp).Select   Workbooks(i & ".xls").Close SaveChanges:=False myError: Next i Application.DisplayAlerts = True こんな感じです。 これを、数字だけでなく数字+アルファベット.xlsのファイル名にしてデータを取り込むにはどうすればいいのでしょうか?色々と試行錯誤をしたり、ネットで調べたりしたのですが、詰んでしまいました。 どなたかお助け下さい。

  • VBAの勤務割表の式を短く

     月間の勤務割表を作成しています。 1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)とし1列3行を名前の定義で13種類作成してあります。 別シートの各セルの入力番号に応じて13種類を貼り付けていますが、式を簡単にできませんでしようか?  お教えくださいませんでしょうか?勉強不足は否めませんが。 尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。 OS Windows7 Office2010 Sub 図形の貼付け2() If Worksheets("メイン").Range("J9").Value Then Select Case Worksheets("メイン").Range("J9").Value 1人-1日 Case 1: ActiveSheet.Range("勤務1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 2: ActiveSheet.Range("勤務2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 3: ActiveSheet.Range("勤務3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("日勤1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("日勤2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("日勤3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select Else Select Case Worksheets("メイン").Range("I9").Value Case 2: ActiveSheet.Range("明け").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("夜勤").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("公").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("有").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 7: ActiveSheet.Range("特").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 8: ActiveSheet.Range("振").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 9: ActiveSheet.Range("欠").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select End If End Sub

  • EXCLの自動マクロ記録を簡潔に編集をお願いします。

    すみません教えてください。  収支会計.XLSの売上台帳のシートを別ファイル確定申告2.xlsの売上作業範囲シートに貼り付けたく自動マクロを記録したのですが、いまいち動きがぎこちなく重く何とかスムーズに出来ないでしょうか? Sub 売り上げ書き込み() ' ' 売り上げ書き込み Macro ' Range("A2:F251").Select Selection.Delete Shift:=xlUp Application.Left = 20.8 Application.Top = 34 Windows("収支会計.XLS").Activate With ActiveWindow .Top = 3.4 .Left = 9.4 End With Sheets("売上台帳").Select ActiveWindow.SmallScroll Down:=-55 ActiveWindow.ScrollRow = 1 With ActiveWindow .Top = 87.4 .Left = 37 End With Range("D5:H1004").Select Selection.Copy Windows("確定申告2.xls").Activate Range("B2").Select ActiveSheet.Paste Range("A2").Select Windows("収支会計.XLS").Activate Range("C5:C430").Select Application.CutCopyMode = False Selection.Copy Windows("確定申告2.xls").Activate ActiveSheet.Paste Range("H8").Select End Sub 宜しくお願いします。

専門家に質問してみよう