Excelの終了

Application.QuitメソッドはExcelを終了させるメソッド。未保存確認も行わずに終了するコード

'Excelを終了する
Application.Quit
'Excelを終了する(未保存の確認も表示しない)
Application.DisplayAlerts = False
Application.Quit

Excelを終了するには「Application.Quit」メソッドを使用します

Excelを終了するため、開かれているブックがすべて閉じられます
未保存の場合は保存確認のメッセージが表示されます
未保存でも構わないので強制的に終了させる場合には2つ目のコードを使用します
「DisplayAlerts」プロパティをFalseに設定をしています

Excelの強制終了についての注意点

基本的にはユーザーフォーム主体の処理を使用している場合にワークシートを操作されないためにユーザーフォーム終了と同時にExcelも終了させるといった場合に使用します

ただ心構えとして持っていて欲しいのが、処理の終了が非常に曖昧なコードであるということです

というのもExcelが終了するということは、VBAの処理もその時点で強制的に終了しているはずです
なのでSubプロシージャなどがEndSubまで走っていない形になります
変数などプロシージャが終了した時点で解放されるといった動きをするものなどが、その終了が曖昧なためその解放自体も曖昧になる可能性があるということです

とはいえ、標準のメソッドであるためこのコード自体でバグが生じるということはないと思いますので心構えとして、そういう曖昧な状況を生んでいる可能性があるというのを持っておいてもらったほうが良いかなと思います

Excelの再計算の実行(全ブック)

Application.Calculateメソッドは開かれている全ブックに対して再計算の実行を行います

'ブック全ての再計算実行
Application.Calculate

再計算を行うには「Application.Calculate」メソッドを使用します

Excelに対して再計算の実行を行いますので、Excelに開かれている全てのブックが対象となります

基本的には処理中再計算を手動にして停止している状態で、一度再計算を実行しておきたい時などに使用します
自動計算を処理中に手動計算に切り替えている場合、自動計算に設定を戻せば再計算されるので、このメソッドは必要ありません

なお指定のブックのみを再計算するというメソッドは存在していません
ワークシートの再計算をループさせるという方法で目的を達成することは可能です
以下の記事で解説しています

Excelの再計算の自動・手動の切替

Application.Calculationプロパティは、再計算の動作設定を行います。手動・自動再計算の切り替えコード

'Excelを手動計算にする
Application.Calculation = xlCalculationManual
'Excelを自動計算にする
Application.Calculation = xlCalculationAutomatic

Excelの再計算の動作設定の変更には「Application.Calculation」プロパティを使用します

このプロパティの設定値を以下に設定すると動作が切り替わります

自動計算 = xlCalculationAutomatic(-4105)
通常の初期設定、セル値が更新されたりすると自動的に再計算する

手動計算 = xlCalculationManual(-4135)
自動的に再計算されることがなく、ユーザーの再計算実行により実行される
VBAでは「Calculate」メソッドを実行した時

再計算の切り替え

再計算の切り替えは、Excelのオプション設定からも行えますので、たまに手動に設定されているブックがあります

これは再計算に時間がかかり、セルの更新毎に再計算をさせる事による待ち時間の解消の為に使用しています

なので、VBAでも全く同じ扱いで構いません
処理中に再計算すること自体は問題ありませんので、とりあえず処理中は手動に切り替えるようなことはしなくていいです

処理中に、セルの更新等が多数あり、そのたびに数秒の待ち時間が発生し最終的に数分もかかってしまうような場合には、このプロパティを「xlCalculationManual」に設定してから処理を実行し、最後に「xlCalculationAutomatic」に戻すことで、その待機時間を無くすことができ、大幅な処理速度向上につながります

なお、自動に設定した時点で再計算が実行されるので再計算を実行するコードを実行する必要はありません

Excelの描画処理を停止する

Application.ScreenUpdatingプロパティは画面描画を抑止する設定です。画面描画抑止のコード

'画面描画を抑止
Application.ScreenUpdating = False
'画面描画の抑止を解除
Application.ScreenUpdating = True

Excelの画面描画を抑止するには「Application.ScreenUpdating」プロパティ「False」を設定します

画面描画の抑止とは、Excelの操作を行った際に発生する画面の表示更新処理のことです
セルへのデータ入力時に表示される内容やシート・ブックの切替時の画面切り替わりを無くす状態です
Excelの画面描画であるため、マウスカーソルの動きなどは抑止されません

この状態になると、画面描画に使用されるメモリが必要なくなるため処理速度の向上につながります

また、処理速度だけでなくシート・ブックが多く切り替わる際画面がちらつき、使用者の目に大打撃を与えるのを防ぐ意味でも使用できます

ただ、当然画面の動きが無くなるということは、一見するとフリーズしたように感じることもあります
何分もかかるような処理で使用した場合、本当にフリーズしたかとおもい思わずタスクキルしてしまう人もいるかもしれません

なので、逆に少しは動きを見せて頑張っているところを見せる必要がある場合もあります、人間と同じですね

また、処理速度の向上につながるためとりあえず入れる、というのは考えものです
特にデバッグ時に動きが見えないのは致命的ですし、そもそもセル選択や切替が無ければ処理速度は変わりません

最後に使用後は必ず解除するようにしましょう

Excelのイベント発生を抑止する

Application.EnableEventsプロパティはイベントの実行を抑止する設定です。イベント実行を無効にするコード

'Excelのイベントを抑止する
Application.EnableEvents = False
'Excelのイベント抑止の解除
Application.EnableEvents = True

Excelのイベント発生を抑止するには「Application.EnableEvents」プロパティ「False」を設定します

イベントとは、保存や印刷、セルの選択などユーザーのなんらかの動作に応じて自動的に発生するプロシージャです
このイベントに何らかの処理を作成した場合、他の処理を実行中でも対象の操作が発生すればイベント処理が実行されます

このプロパティを「False」にしておくことで、このイベントプロシージャの実行を抑止することが出来ます
抑止する場面は、ユーザーの操作ではなく処理中に行った処理での発生を抑止する目的で使用します

イベント抑止の使用場面

イベント作成時のコード
イベント作成時

まず、イベントを作成します
画像のようにシートのイベントにより、指定のシートのみで「UserForm1」を表示させたいのでこの様にActivateイベントではフォームの表示処理を実行します
Deactivateイベントではフォームを終了させます

このイベントはそれぞれ、シートがアクティブになったときと非アクティブになったときに発生するイベントです

ただ、この処理を作成したときに問題となるのはフォームの処理で別のシートのデータを扱ったりする場合にシートを移動させる必要があります
この時にフォームの処理中でありますが、シートが切り替えられた時点でDeactivateイベントが発生しフォームは強制終了されます

フォームが終了しても処理中はデータがメモリ上に保持されているため、入力することは出来ます
ただ、入力が完了して元のシートに戻ってきたときにActivateイベントが発生するためフォームが起動しますが、この時に表示されるデータは初期値になっています

入力をすると、コントロールのデータが全て初期リセットされるフォームになってしまいます、これは使い勝手最悪です

そこで使用するのがこのプロパティです
入力処理のシートを切り替える前に「False」に設定しておけばシート切替によるフォームの起動・終了が実行されなくなります

Excelのイベントを抑止するので、ブックイベントもシートイベントも実行されなくなりますので、使用後は必ず設定を解除しておきましょう

ただ、ユーザーフォームはExcelとは別のようでこの設定を行ってもイベントの実行は抑止されませんので注意が必要です
ユーザーフォームのイベントに対しては、フラグで抑止処理を自作する必要があります

Excelのメッセージを抑止

Excelのメッセージを表示させるかの設定であるDisplayAlertsの切り替えコード

'メッセージを抑止する
Application.DisplayAlerts = False
'メッセージの抑止を解除する
Application.DisplayAlerts = True

Excelからのメッセージを抑止するには「DisplayAlerts」に「False」を設定します

Excelからのメッセージとは、シートの削除確認であったり未保存時の保存確認などのメッセージ表示です

これらは通常は必要なメッセージですが、VBAの処理中に表示されるとそのメッセージが表示されている間処理が停止してしまいます
なので、それらの操作をVBAで実行する際にはこのプロパティで抑止しておく必要があります

メッセージを抑止していますが、ちゃんと内部的には応答はおこなっています
この応答に関してはExcelが自動的に判断して行っていますので、もしその判断で困る場合は都度対処していく必要はありますが、ほとんどは無視する前提を考慮した判断なので困ることは無いと思います

例えば、シート削除に関しては削除が実行できているのでOKの応答をしています
保存確認では、保存が実行されずに閉じるので保存しない(NO)の応答をしています

メッセージは必要なものです、使用後は必ず抑止を解除しておきましょう
例の2つのコードはセットで使用しましょう

Excelを非表示にする

Visibleプロパティを使用してExcelをタスクバーからも非表示にしてしまうコード

'Excelを非表示にする
Application.Visible = False
'Excelを表示する
Application.Visible = True

Excelを非表示にするには「Visible」プロパティの設定を変更します
「False」を指定すると非表示状態、「True」を設定すると表示状態になります

非表示にしたExcelはタスクバーからも表示が消えるため、再表示させるにはプロパティの設定を行う必要があります
VBE画面は表示していれば非表示にはならないので、コードのテストをする場合はVBEの画面を消さないようにしてください

これはバックグラウンド実行される状態になりますので、完全にユーザーからのアクセスを遮蔽できますし、ユーザーフォーム主体時にExcelの最小化では少し不安な部分(簡単に再表示できる状態)を解消できます

ですが、安易な使用はおすすめできません

なぜなら、処理が途中でエラーなどで停止した際、ユーザーが戸惑う事請け合いです

該当ブックを開けばExcelが自動的に再表示されるので、復帰は可能ではありますが・・・
この際に2重で開けない警告が表示されますので、わからずOKしてしまうと未保存の作業データが消失します

さらに、別のPCからやExcel再立ち上げからブックを開く際は別のユーザーが使用中となり編集不可の状態に陥ります

最小化よりも見えない分スマートですが、使用には注意が必要です
十分動作確認をして、もしもの復帰方法も確保した上で使用してください
そう、それが真のスマートです

Excelの表示モードを変更

最大化・最小化・標準のそれぞれの表示モードの切り替えと取得を行うコード

'Excelを最大化する
Application.WindowState = xlMaximized
'Excelを最小化する
Application.WindowState = xlMinimized
'Excelを標準サイズにする
Application.WindowState = xlNormal
'Excelの表示モードを取得
Debug.Print Application.WindowState

Excelの表示モードの変更と取得には「WindowState」を使用します
サイズの指定ではなく、表示状態の設定を変更します
なので例コードの3種類の設定を行えます
「最大化」・「最小化」・「標準」ですね

また当然ですが、Excelのウィンドウサイズを変更する場合はこのプロパティを「xlNormal」に設定しておく必要があります

主な使用方法としては、上記のサイズ変更の際とユーザーフォーム主体のプログラムを作ったときにエクセルを表示させないように最小化しておく時などに使用します

また、このプロパティを利用することで簡易的に画面のサイズを取得できます
それを応用してユーザーフォームのサイズを自動的に調整する方法があります
そちらの解説は以下の記事で行っています