Excel VBAで別ブックからデータを高速に読み込む方法

Visual Basic

Excel VBAを使用して他のブックからデータを読み込む際、50件程度のデータでも処理速度が遅く感じることがあります。この記事では、Excel VBAを使って他のブックからデータを効率的に読み込む方法と、速度改善のためのベストプラクティスについて解説します。

Excel VBAでのデータ読み込みの課題

Excel VBAで他のブックからデータを読み込む際、特にデータ量が多い場合や複数回の操作が必要な場合、処理速度が遅くなることがあります。特に、画面更新や警告表示を無効にせずに読み込むと、無駄な処理が多くなり速度が低下します。

また、`Range.Value`を使ってデータを直接コピーする方法は便利ですが、大量のデータを読み込む際にはパフォーマンスが問題となります。

データ読み込み速度を改善するための設定

以下のコードを使用することで、読み込み速度を大幅に改善することができます。重要なのは、`ScreenUpdating`や`DisplayAlerts`の設定を行い、不要な画面更新や警告を無効にすることです。

Sub excellaaa()
Dim ExcelApp As New Application
Dim wb As Workbook
Dim RPath As String

RPath = "バス\data01.xlsx"

ExcelApp.ScreenUpdating = False
ExcelApp.Visible = False
ExcelApp.DisplayAlerts = False

Set wb = ExcelApp.Workbooks.Open(RPath, ReadOnly:=True)

With wb.Worksheets("Sheet1")
Dim x
x = .Range("A1").CurrentRegion.Value
ThisWorkbook.Worksheets("D").Range("A1").Resize(UBound(x, 1), UBound(x, 2)).Value = x
End With

ExcelApp.ScreenUpdating = True
ExcelApp.DisplayAlerts = True
ExcelApp.Quit

Set wb = Nothing
Set ExcelApp = Nothing
End Sub

このコードでは、画面更新(`ScreenUpdating`)、警告表示(`DisplayAlerts`)を無効にし、Excelアプリケーションをバックグラウンドで動作させることで、処理速度を最適化しています。

更なるパフォーマンス向上のためのテクニック

さらにパフォーマンスを向上させるためには、`Range.Value`を一度に読み込んで、対象シートにまとめて書き込む方法を活用するのが有効です。VBAでは、セル単位での読み書きが遅くなるため、範囲を一括で読み書きすることが重要です。

また、必要なデータだけを読み込むようにすることで、不要なデータの読み込みを避け、処理速度をさらに改善できます。

まとめ

Excel VBAで他のブックからデータを効率よく読み込むためには、画面更新や警告を無効にする設定を行い、範囲単位でデータの読み書きを行うことが重要です。また、データ量が多い場合や処理時間を短縮したい場合は、これらの改善策を実施することで、パフォーマンスが大幅に向上します。

コメント

タイトルとURLをコピーしました