お世話になります。
エクセルVBAの画面を立ち上げると、プログラムを書く場所として
Sheet1 と ThisWorkbook があり、またマクロの登録などを行うと作成される 標準モジュール があると思います。
Sheet1 はそのシートの中でのみ有効。
ThisWorkbook はそのブックの中でのみ有効。
標準モジュール はエクセル全体で有効と解釈していますが、
①この解釈で合っていますか?
②他に違いはありますか?
またこの場合はこちらの方が良い、などもあれば教えていただきたいです。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
①この解釈で合っていますか?
あっていません。
標準モジュールは、ブック内で共通のモジュールになります。
ThisWorkbook
ブックに関する処理を記述する場所。
ブックを開いたとき、閉じたときのイベントなんかはここで書きます。
各シート
そのシートに関する処理を記述する場所。
そのシートに対するイベントなんかはここで書きます。
また自身のシート・メソッドについては、直接記述することができます。
VBA
1' 自身のシートにアクセス 2Cells(1,1).Value = 1 3' 他のシートにアクセス 4Worksheets("Sheet2").Cells(1,1).Value = 1
標準モジュール
全シートで共通の処理や変数を置くのが基本です。
あちこちで使う共通関数などです。
他にもブック内に持てる要素としてクラスモジュールやユーザーフォームなどがありますが割愛します。
そのほか、PERSONAL.XLSBというものもあります(Excelのバージョンによってはこの名前ではない可能性あり)。
これはExcelを起動すると必ず読み込まれるもので、ユーザーごとに持っています。
いつも使う処理なんかを置いておくと便利に使えます。
投稿2019/04/24 23:59
総合スコア17000
0
ベストアンサー
何をもって「有効」とするのかがわかりませんが、
Sheet1 はそのシートの中でのみ有効。
ThisWorkbook はそのブックの中でのみ有効。
標準モジュール はエクセル全体で有効と解釈していますが、
に該当する要素がぱっと思い浮かばないので、
①この解釈で合っていますか?
に関しては間違っていると思われます。
②他に違いはありますか?
個人的にぱっと思いついた違いを挙げると以下になります。
種類 | Application.Run | 外部に公開 | New | Me |
---|---|---|---|---|
標準モジュール | ○ | 公開 変更可 | × | × |
Excel のモジュール | ○ | 公開 変更不可 | × | ○ |
ユーザーフォーム | × | 非公開 変更可(*1) | ○ | ○ |
クラスモジュール | × | 非公開 変更可 | ○ | ○ |
表の内容の補足
Excel のモジュール
Sheet1
やThisWorkbook
などのことです。
Application.Run
そのモジュール内で定義されたSub
・Function
プロシージャを、Application.Run メソッド (Excel) | Microsoft Docs で呼び出せるかどうかです。
引数のない Public な Sub プロシージャを定義したとき、Alt + F8
の「マクロ」に表示されるかどうか、と考えても大体の場合は問題ないです。
外部に公開
プロジェクト(VBAProject など)の外部から、そのモジュールの情報にアクセス可能かどうかです。
具体的には「参照設定」などで xlsm ファイルなどを参照したときに、参照している側で表示されるかどうかです。
標準モジュールを非公開にした場合、Alt + F8
の「マクロ」にも表示されなくなります。
(*1)ユーザーフォームに関しては特殊な操作をしないと設定を変更できません。
New
New ○○
として、そのモジュールのインスタンスを増やすことができるかどうかです。
vba
1'New の使用例 2Dim myCol As VBA.Collection 3Set myCol = New VBA.Collection
Me
そのモジュール内でMe
キーワードが使えるかどうか、すなわちそのモジュールが「オブジェクト モジュール」かどうかです。
標準モジュールではイベントの購読、生成はできませんが、オブジェクト モジュールであればイベントの購読、生成ができるようになります。
個人的な標準モジュール と Excel のモジュール の使い分け
その処理を他でも使いたいかどうか
Excel のモジュールに書いた内容は外部に保存するのが少し手間となるため、「この シート|ブック でしか使わない」という処理を書くことが多いです。
逆に汎用的な処理、他でも使いたい処理は標準モジュールに記述します。
処理の種類
セルに入力されたときに何かする、ブックが開かれたときに何かする、といったイベントの処理をしたい場合は、標準モジュールではできないため、Excel のモジュールを使うことが多いです。
処理の壊れやすさ
通常の Excel 操作をする限り、標準モジュールが消えることは少ないです。
対してSheet1
などは、実体のシートがユーザーの目に見える形で存在するため、そのシートが消されると中の記述も消えます。
シートが消されると記述も消える、は通常はデメリットですが、
記述が壊れたことに早期に気付きやすくなる(中途半端な状態で処理が動きにくくなる)というメリット、と考えることもできます。
そのシートを壊された時点で全体の処理が成り立たなくようなシートには、シート側に記述をすることが多いです。
投稿2019/04/24 12:48
編集2019/04/25 13:36総合スコア2166
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/25 00:28
2019/04/25 00:36
2019/04/26 00:11