ちょっと便利な機能

戻る

エクセルVBAでプログラムを組む際に、ちょっと便利な機能をいくつか紹介しよう。使っても使わなくてもどちらでも構わないようなものだが、「気が利いた」プログラムにする助けにはなるだろう。

まずは、画面更新の停止と再開である。画面更新を停止してやると、プログラムの実行は飛躍的に速くなる。何度も画面更新を行うと画面がちらついたようになるので、見た目にも優しい。特に長い処理の場合は、是非機能を盛り込んで欲しいものだ。プログラム終了時には、自動的に画面更新は再開されるようになるが、プログラム中でこれを戻してやるほうが良い。

画面更新の停止
Application.ScreenUpdating = False
画面更新の再開
Application.ScreenUpdating = True

画面更新を停止してしまうと、プログラムの処理過程がわからなくなる。進捗はおろか、異常事態になっていても気が付くことも無いだろう。短時間で処理が終わるのなら良いのだが、処理に時間がかかる場合は、何かしらのメッセージを表示したい。メッセージボックスを表示するとOKをクリックせねばならないから、これも困る。この場合は、ステータスバーにコメントを表示してやると良い。もちろん、「処理中」というメッセージを出したままでは意味が無いので、処理の途中途中で適宜表示を変えなければならない。また、プログラム終了後も出たままにならぬよう、消しておく。

ステータスバー表示
Application.StatusBar = False
Application.StatusBar = "処理中"
ステータスバー表示を消す
Application.StatusBar = False

プログラムの実行速度を高めるためには、自動再計算の停止も有効である。セルに数式を埋め込んだりした場合などは、その都度再計算するのは鬱陶しい。もちろん、計算結果を参照する必要がある時は適宜プログラムから再計算を実行させるようにする。

自動再計算の停止
Application.Calculation = xlManual
再計算実行
Calculate
自動再計算の再開
Application.Calculation = xlAutomatic

ワークシートを変更されるとプログラムが正しく動作しなくなることもありえる。別の理由でワークシートを保護したいこともあるだろう。その場合は、シート保護をかける。シート保護の状態では当然操作が出来ないので、プログラム上でシート保護を解除し、処理の後、再度シート保護をかける。パスワードの設定も適宜行うことが出来る。

シート保護
Worksheets("Sheet1").Protect ("パスワード")
シート保護解除
Worksheets("Sheet1").Unprotect ("パスワード")

ボタンやツールバー等を非表示に設定すれば、使用者に見せないようにできる。ある処理を行った後に、初めて次に進むボタンを表示する場合などに有効である。同じ様にワークシートの非表示を設定したり、戻したりすることもできる。非表示にしたワークシートを選択(Select)することは出来ないので注意が必要である。画面更新を停止し、表示をONにし、必要な処理を行った後に再度非表示に設定する、というステップを踏めば、結果のみを表示する仕掛けもできる。

ボタン非表示
Button("ボタン1").Visible = False
ボタン表示
Button("ボタン1").Visible = True

いずれも、「ちょっと便利」というもので、必要と言うほどではない。知っていた方が良いかもしれないことだと思って頂きたい。