- ベストアンサー
【Excel VBA】多くのファイルからのコピー貼り付け連続処理
- アンケートを取った500個のxlsファイルがあります。保護されたシートの範囲をコピーし、集計用の別ファイルへ貼り付けていく操作を自動化するマクロを作りたい。
- 1人目のデータのみを記録したマクロでは、一つずつファイル名やセルの範囲を変更しているため、全体の処理はスッキリとまとまっていません。
- 500人分のファイルに対して、保護を解除し範囲をコピーし、集計用ファイルへ貼り付ける操作を一括で行うマクロを作成したい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
セオリーとしては Dim i As Long For i = 1 To 500 With Workbooks.Open("D:\AAA\" & Format$(i, "000") & ".xls", UpdateLinks:=0, ReadOnly:=True) 'コピー処理 .Close savechanges:=False End With Next こんな感じでFor...Nextステートメントで1Bookずつ開いてコピー...のLoop処理にすればスッキリまとめる事ができます。 ですが今回のようにBook名、シート名、セルアドレスなどが、固定&規則性がある変動値の場合は ダイレクトに参照数式をセットする事もできます。こっちが速いです。 Sub test2() Const f1 = "='D:\AAA\[" Const f2 = ".xls]アンケート'!" Dim f As String Dim i As Long With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With With ActiveSheet For i = 1 To 500 f = f1 & Format$(i, "000") & f2 .Cells(i + 3, 4).Resize(, 4).Formula = f & "P6" .Cells(i + 3, 9).Resize(, 50).Formula = f & "A70" Next With .Range("D4:G503") .Copy .PasteSpecial xlPasteValues End With With .Range("I4:BF503") .Copy .PasteSpecial xlPasteValues End With End With With Application .Calculation = xlCalculationAutomatic .EnableEvents = True .ScreenUpdating = True End With End Sub ※存在しないBookがあったり、フォルダ名を間違ったりすると[値の更新]ウィンドウが表示されます。 変更が必要な式の数量分繰り返されますので、設定には気をつけてください。 もしそうなった場合、[Ctrl]キーと[Break]キーを同時押しした後に[Esc]キー。...でデバッグできます。
その他の回答 (1)
- tarinko_06
- ベストアンサー率24% (15/62)
ファイル名を変数にしてforで回すとか フォルダの中に入れてぐるぐる回すとかって事?
お礼
おそらくご想像いただいてる内容かと推察しますが、 申し訳ありません、私の説明がよくなかったようで 伝わらなかったみたいです。。。 いずれにせよ、ありがとうございました。
お礼
教えていただいた2つ目のマクロでバッチリでした!! 大変助かりました。そしてとても勉強になりました。 ありがとうございました!!!