📌

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