VBAの達人たちは、その多くがマクロのコードを標準モジュールに書くことを推奨しています。
しかし、VBAアセットでは、コードをシートモジュールに書くというスタイルを採っています。その理由は、次の2つです。
- シートに関係の強いプロシージャをそれ自体のモジュール内に記載できるので、マクロ全体の構造が分かりやすくなる。
- CellsやRangeの前にシート名を指定しなくても、それが書かれたシートが指定されたことになるので、コードをシンプルにすることができる。
そもそも、エクセルは、主にシートモジュールを使うことを前提に作られているようにも思えます。
まず、VBE(ビジュアル・ベーシック・エディタ)の画面を見てください。左上のプロジェクトと書かれているエクスプローラーのようなウィンドウには、Sheet1とThisWorkbookというフォルダのようなものが表示されています。
Sheet1のようにブックの各シートに割り当てられたモジュールのことをシートモジュールと言います。この最初の状態では、標準モジュールなんて、表示されていません。
今、プログラムで動かしたいのがSheet1だとすると、ここをクリックしたくなりますよね。クリックするとSheet1にプログラムが書けるようになります。
さらに、ワークシート画面でシートのタブを右クリックすると、「コードの表示」というコマンドがあるのが分かります。
これをクリックすると、そのシートのモジュールが開き、操作しようとしているシートのコードを、その直接編集できるようになっています。
つまり、エクセルは、シートの操作に関わるコードは、それぞれのシート・モジュールに書くことを原則にしているかのような作りになっているのです。
ただし、シートモジュールにコードを書くことが適さない場合もあります。マクロをテンプレートやあアドインとして使う場合など、別のファイルのシートを操作する場合には、標準モジュールにコードを書くべきでしょう。また、シートモジュールでは、Public変数を宣言できないことにも注意が必要です。
コメント
Public変数を宣言できないことについて、記述を追加しました。
シートのタブに関する記述を追加しました。