📘 Excel逆引き事典

【VBA】全てのシートを配列を使って高速に抽出する方法

日々の業務で大量のデータを扱う際、手作業でのデータ抽出は時間がかかります。この記事では、VBAを使用して全シートのデータを高速に配列に格納し、効率的に処理する方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub ExtractAllSheetsToArray()
    Dim ws As Worksheet, arr() As Variant
    Dim i As Long, j As Long, numSheets As Long
    Dim lastRow As Long, totalRows As Long
    
    ' 全シートの数をカウント
    numSheets = ThisWorkbook.Sheets.Count
    
    ' データ配列の初期化
    ReDim arr(1 To numSheets, 1 To 1048576, 1 To 256) ' 最大行数と最大列数を設定
    
    ' シートごとにデータを抽出
    For Each ws In ThisWorkbook.Sheets
        i = i + 1
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        arr(i, 1, 1) = ws.Name ' シート名を配列の最初に格納
        For j = 2 To lastRow
            arr(i, j - 1, 1) = ws.Cells(j, 1).Value ' 列Aのデータを配列に格納
        Next j
    Next ws
    
    ' データ処理(ここでは表示のみ)
    For i = 1 To numSheets
        Debug.Print "Sheet Name: " & arr(i, 1, 1)
        For j = 2 To UBound(arr, 2)
            If Not IsEmpty(arr(i, j - 1, 1)) Then Debug.Print arr(i, j - 1, 1)
        Next j
    Next i
End Sub

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

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