Excel VBA 逆引き集 | メモリ効率化

Excel VBA
スポンサーリンク

メモリ効率化(実務向け)

Excel VBAで大量データを扱うとき、「メモリ効率化」を意識すると処理が安定し、速度も向上します。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • 不要なオブジェクトは解放するSet obj = Nothing
  • 配列は必要なサイズだけ確保するReDim / ReDim Preserve
  • セル操作は避けて配列で処理 → メモリと速度の両方に効く。
  • 画面更新やイベントを止める → 無駄なメモリ消費を防ぐ。
  • Variantの使いすぎに注意 → 型を明示するとメモリ効率が良い。

テンプレ1:オブジェクトを解放する

Sub Memory_ObjectRelease()
    Dim ws As Worksheet
    Set ws = Worksheets("Data")

    MsgBox ws.Name

    ' 使用後は解放
    Set ws = Nothing
End Sub
VB
  • ポイント: 使い終わったオブジェクトは Nothing にして解放。

テンプレ2:配列サイズを必要最小限にする

Sub Memory_ArraySize()
    Dim arr() As Long
    Dim i As Long

    ' 必要なサイズだけ確保
    ReDim arr(1 To 1000)

    For i = 1 To 1000
        arr(i) = i * 2
    Next i

    Debug.Print "最後の値=" & arr(1000)
End Sub
VB
  • ポイント: 無駄に大きな配列を確保しない。

テンプレ3:動的にサイズ変更(ReDim Preserve)

Sub Memory_ArrayResize()
    Dim arr() As String
    Dim i As Long

    ReDim arr(1 To 3)
    arr(1) = "A": arr(2) = "B": arr(3) = "C"

    ' サイズを拡張(既存データ保持)
    ReDim Preserve arr(1 To 5)
    arr(4) = "D": arr(5) = "E"

    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub
VB
  • ポイント: Preserve を使うと既存データを保持したまま拡張できる。

テンプレ4:セル操作を避けて配列で処理

Sub Memory_ArrayProcess()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("A2:C10000")
    Dim v As Variant: v = rg.Value

    Dim r As Long
    For r = 1 To UBound(v, 1)
        v(r, 3) = v(r, 3) * 2 ' 数量を2倍
    Next r

    rg.Value = v

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
VB
  • ポイント: セルを直接操作せず、配列でまとめて処理することでメモリ効率も速度も改善。

テンプレ5:Variantを避けて型を明示

Sub Memory_TypedArray()
    Dim arr(1 To 1000) As Long
    Dim i As Long, sumVal As Long

    For i = 1 To 1000
        arr(i) = i
        sumVal = sumVal + arr(i)
    Next i

    MsgBox "合計=" & sumVal
End Sub
VB
  • ポイント: Variant は便利だがメモリ消費が大きい。型を明示すると効率的。

例題で練習

'例1:オブジェクトを解放
Sub Example1()
    Memory_ObjectRelease
End Sub

'例2:配列サイズを最小限に
Sub Example2()
    Memory_ArraySize
End Sub

'例3:配列を動的に拡張
Sub Example3()
    Memory_ArrayResize
End Sub

'例4:セルを配列でまとめて処理
Sub Example4()
    Memory_ArrayProcess
End Sub

'例5:型を明示してメモリ効率化
Sub Example5()
    Memory_TypedArray
End Sub
VB

初心者向けポイント

  • オブジェクトは解放する: Set obj = Nothing を忘れない。
  • 配列は必要なサイズだけ: 無駄に大きくしない。
  • セル直操作は避ける: 配列でまとめて処理する。
  • Variant乱用は避ける: 型を明示すると効率的。
  • 画面更新を止める: ScreenUpdating=False で無駄なメモリ消費を防ぐ。

👉 この「メモリ効率化テンプレ」をベースにすれば、実務での大量データ処理も安定して高速にこなせます。

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