📌
VBAが爆速化!試して効果のあった5つの小技
📌 はじめに
「Excelマクロ、便利だけど重すぎて昼休みになっちゃう…」
そんな悩み、ありませんか? 私はありました。しかも何年も…。
社内の定型業務を自動化するために書いたはずのVBAが、逆に業務を止めてしまう──
そんな本末転倒な日々に終止符を打つべく、試行錯誤した末に効果があった「5つの小技」をご紹介します。
どれも知ってしまえばシンプル。でも、実際に使ってみると驚くほど体感が変わるはずです!
⚙️ 小技①:画面更新を止める
Application.ScreenUpdating = False
' ここにメインの処理
Application.ScreenUpdating = True
画面描画のたびに発生する“チラつき”と“処理負荷”。まずはこれをオフにしましょう。 処理の開始前に False、終了後に True に戻すのを忘れずに。
⚙️ 小技②:計算モードを手動に切り替える
Application.Calculation = xlCalculationManual
' 計算負荷のある処理
Application.Calculation = xlCalculationAutomatic
大量の数式セルがあると、操作のたびに再計算が走って時間がかかります。 一時的に自動計算を止めるだけで、驚くほどスムーズになります。
⚙️ 小技③:Select / Activateを減らす
' 遅くなりがちなコード
Range("A1").Select
Selection.Value = "Hello"
' より高速な書き方
Range("A1").Value = "Hello"
「とりあえず .Select」で書いていた昔の私に教えてあげたい…。 直接指定するだけで、処理がスピーディかつシンプルに。
⚙️ 小技④:Withステートメントでまとまった処理
With Worksheets("Sheet1")
.Range("A1").Value = "Hello"
.Range("B1").Value = "World"
End With
同じオブジェクトに複数回アクセスするときは 'With' が便利! 可読性も向上して、メンテナンスもしやすくなります。
⚙️ 小技⑤:配列&Dictionaryでループ高速化
Dim data As Variant
data = Range("A1:A1000").Value
Dim i As Long
For i = 1 To UBound(data, 1)
' ここで配列からデータ処理
Next i
セルを1つずつ読むのではなく、配列に一括読み込みして処理。 さらに重複チェックやユニーク集計には 'Dictionary' の活用もおすすめです。
🏁 おわりに
たった数秒の短縮でも、積もるととんでもない時間ロスになりますよね。 もし「これは便利だった!」というテクがあれば、ぜひコメントで教えてください!
あなたのVBAライフが快適になりますように🧑💻✨
Discussion