メモリ効率化(実務向け)
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で無駄なメモリ消費を防ぐ。
👉 この「メモリ効率化テンプレ」をベースにすれば、実務での大量データ処理も安定して高速にこなせます。
