こんにちは。
ごんた@VBAレッスン です。
お読みいただき本当にありがとうございます😊
今日は、VBAを学び始めた方が必ず一度は通る「画面チカチカ問題」についてお話しします。
■ マクロがチカチカする…とりあえず“おまじない”を入れていた頃
マクロを実行すると画面が切り替わってチカチカ…。
ネットで調べると、だいたいこう書いてあります。
```vba
Application.ScreenUpdating = False
```
「とりあえず入れとけば速くなるらしい」
そんな“おまじない”のように使っていた時期が、私にもありました。
でも今は、まったく使っていません。
なぜなら、
チカチカの原因は“階層の理解不足”だった
と気づいたからです。
■ チカチカの正体は「階層を意識していないコード」
例えば、こんなコード。
```vba
Range("A1").Value = "こんにちは"
```
これは
「アクティブなシートのA1」
という意味です。
- どのシートか指定していない
- .Select や .Activateを多用して画面が切り替わる
- 結果としてチカチカする
つまり、
画面が動いているのではなく、コードが画面を動かしている
ということなんです。
■ おまじないでごまかしていた頃の自分
当時の私は、
- とりあえず ScreenUpdating = False を入れる
- なんとなく速くなった気がする
- でも根本原因は分かっていない
こんな状態でした。
効果はあるけれど、
「なぜ必要なのか」を理解していないまま使っていた
というのが正直なところです。
■ 今は「正しく指定する」ことでチカチカしない
階層を意識して書くようになってから、
画面がチカチカすることはほぼなくなりました。
```vba
Worksheets("名簿").Range("A1").Value = "こんにちは"
```
- どのシートか明示する
- .Select や .Activate を使わない
- 必要な場所に直接書き込む
これだけで、
ScreenUpdating = False が不要になる
ということに気づいたんです。
■ ネットの“おまじないコード”に惑わされないでほしい
ネットには便利なコードがたくさんありますが、
その中には「理由が分からないまま使われているもの」も多いです。
大事なのは、
なぜ必要なのか”を理解すること。
遠回りに見えて、これが一番の近道です。
■ まとめ
- 画面チカチカの原因は「階層を意識していないコード」
- .Select や .Activate が画面を動かしている
- ScreenUpdating = False はおまじないではなく、本来は最適化のための設定
- 階層を正しく指定すれば、ほとんど不要になる
- 理由を理解して書くと、コードは一気に安定する
私も昔は「とりあえず入れとこ」で書いていました。
でも、階層を意識するようになってから、
おまじないに頼らなくても動くコード が書けるようになりました。
🌱 VBAを学び始めた方へ。
基礎からしっかり、安心して学べるレッスンはこちら!
次回も「なるほど!」と感じられる内容をお届けします。
また次の記事でお会いしましょう😊