VBAを使用したプログラムで処理をまたいでデータを保持する方法をシェアします。Excel起動後に一度だけ大きなファイルを読み込み、その後は読み込んだデータを使って(最初に読み込んだインスタンスを使い回して)随時処理をしたい、といった場合に今回のテクニックが役に立ちます。今回は個人的にオススメな永続化方法を2つ紹介します。標準モジュールで宣言したパブリック変数は、Excelを閉じるまでインスタンスが破棄されることはありません。この特性を利用する方法です。VBAが強制終了してしまった場合に、グローバル変数のインスタンスも初期化されてしまう点に注意しましょう。個人的には上記よりもオススメな方法です。Excelシートには3種類の表示スタイルがあります。「Visible」と「Hidden」と「VeryHidden」です。Visibleは通常の表示シートです。Hiddenは、通常の非表示シートです。VeryHiddenはユーザーが表示することができない隠しシートです。この「VeryHidden」シートにデータを格納し操作する方法です。標準モジュールにパブリック変数を宣言して使いまわす方法それでは、まず1つ目の方法の実装を以下にシェアします。「PrintCounter」が呼ばれる度に増加していきます。これにより、Excelを開いている間はオブジェクトを使いまわすことができます。この方法の注意点としては、バグなどによってプログラムが途中で強制終了してしまった場合(下のような画面が出てきて、ユーザーが「終了(E)」を押下した場合)グローバル変数の値もリセットされてしまいます。次に、個人的にオススメな方法を紹介します。Excelのワークシートは、VBEで見ると以下のように3種類の表示モードを選ぶことができます。(ユーザーが表示に変更できない非表示)今回は、この「xlSheetVeryHidden」を使用してデータを保持する処理を実装します。Sub上記のプログラムで「VeryHiddenSheet」は、「xlSheetVeryHidden」を設定したワークシートオブジェクトです。このシートはユーザーが表示することができないので、ユーザーに変更されることなく、プログラムで自由に操作することができます。値を保持することができます。VBAで、処理をまたいでデータを保持する方法をシェアしました。この他にも、外部ファイルにデータを保存する方法や、AccessDBに値を保存する方法なども考えられます。この方法に興味がある場合や、他にもこんなことが知りたい、などがあれば、是非フォームからメッセージを頂きたく思います。ソフトウェアエンジニアです。Javaを得意としていますが、フロントエンドやDevOps、モバイルアプリもやってます。開発標準や開発プロセスも守備範囲。