📘 Excel逆引き事典

【VBA】全てのシートを開かずに(外部参照で)取得する方法

日々の業務で大量のデータを扱う際、全てのシートを開くのは時間がかかるだけでなく、労力も必要です。この記事では、VBAを使って全シートの情報を非開状態で取得し、業務効率化に役立てる方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub GetSheetDataWithoutOpening()
    Dim wb As Workbook
    Set wb = ThisWorkbook 'または具体的なワークブック名を指定する
    Dim ws As Worksheet, targetWs As Worksheet
    Set targetWs = wb.Sheets("TargetSheet") '取得したデータを保存するシート
    Application.ScreenUpdating = False '画面更新停止
    For Each ws In wb.Worksheets
        If ws.Name <> targetWs.Name Then '対象のワークシートはスキップ
            Dim lastRow As Long
            lastRow = GetLastRow(ws) '各シートの最終行を取得
            Dim i As Long
            For i = 1 To lastRow
                'データ取得処理(例:ws.Cells(i, 1).Value)
                targetWs.Cells(targetWs.Rows.Count, "A").End(xlUp).Offset(1, 0).Value = ws.Cells(i, 1).Value '取得したデータをターゲットシートに保存
            Next i
        End If
    Next ws
    Application.ScreenUpdating = True '画面更新再開
End Sub

Function GetLastRow(ws As Worksheet) As Long
    Dim lastCell As Range
    Set lastCell = ws.Cells(ws.Rows.Count, 1).End(xlUp)
    GetLastRow = lastCell.Row
End Function

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

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