📘 Excel逆引き事典

【VBA】開いている全ブックを配列を使って高速にコピーする方法

手作業で複数のExcelファイルからデータをコピーするのは時間がかかります。この記事では、VBAを使用して開いている全てのワークブックを高速にコピーし、業務効率化を図る方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub CopyAllOpenBooks()
    Dim wb As Workbook, ws As Worksheet
    Dim arr() As Variant
    Dim i As Integer, j As Integer
    Application.ScreenUpdating = False '画面更新停止
    ReDim arr(1 To ThisWorkbook.Sheets.Count)
    For Each wb In Workbooks
        If Not wb Is ThisWorkbook Then
            For Each ws In wb.Sheets
                arr(i) = ws.UsedRange.Value
                i = i + 1
            Next ws
        End If
    Next wb
    ReDim Preserve arr(1 To i)
    Set ws = ThisWorkbook.Sheets.Add
    ws.Range("A1").Resize(UBound(arr), Columns(ws.UsedRange).Count).Value = Application.Transpose(Application.Index(arr, 0, 0))
    Application.ScreenUpdating = True '画面更新再開
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。