拾うロマンに、捨てるロマン
自分の頭ではいよいよ考えつかなくなり、遂に「マクロ 高速化」という言葉で検索をかけた結果、目の前には想像通り「答え」が並んでいた。
早速、何件かのサイトを見て回ってみると、共通して書かれている方法があった――それは「画面更新の非表示」である。
マクロを実行している間、値を設定する度に新しい乱数が生成され、画面上に文字が表示される。この描写自体を止めることによって、高速化を図ろうという訳である。
もちろん、画面の描写を止めても、セルには値が設定されているので、これによって動作がおかしくなるようなことはない。
実装方法は非常に簡単。
画面の更新を行う処理の前に「Application.ScreenUpdating = False」と入れるだけ。英語ではあるが、「アプリケーションの画面更新をオフ(False)にする」という意味合いであることは、なんとなく分かるだろう。
(それと同時に、マクロの終わり際に「Application.ScreenUpdating = True」と入れ、設定を元に戻しておく)
早速、この一文をソースに追加した上で実行を行う。
今回は結果だけを早く確認したかったので、530000行を3回通り繰り返すにとどめている。
結果は以下のとおり。
1回目:19.16秒――シェゲドスイア
2回目:19.03秒――ダェイモノピオ
3回目:19.04秒――ハェツクスピノ
第2回のレポートの平均実行時間が「21.88秒」だったことを考えると、およそ2.5秒――すなわち一割から一割五分程度の削減となった。
塵が積もって富士山になるようなこの現状で、「一割」がもたらす影響は決して小さくはない。悪くはないスタートと言えるだろう。
ただ、「画面を淡々と描写し続ける」という面白味は消えた。アニメや小説の分析シーンで出てくるような画面の明滅が無くなったのである。
そういう実装をしたのだから当たり前なのだが――少しだけ虚しく感じてしまう。
修正は更に続く。
セルの値を取得する際に、Rangeを用いていたものについて、Cellsを用いるように変更(言い換えると「範囲」を参照していたものを「セル」を参照するように設定)してみる。
実行結果は以下の通り。
1回目:18.89秒――タノイャリピア
2回目:18.87秒――シニェクメヴア
3回目:18.93秒――シナプクスピオ
本当に微々たる差ではあるが、早くなっている。
こんな修正で早くなったりするのか……E〇CEL(というよりマクロ)の仕様は奥が深いなあ。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます