お世話になります。
EXCELで「Visual Basic Editor」を開くと、
左側に下記が表示されます。
Microsoft Excel Objects > Sheet1、Sheet2、Sheet3、ThisWorkBook
フォーム > UserForm1
標準モジュール > Module1
クラス モジュール > Class1
Sheet1やUserForm1、Module1、Class1にそれぞれコードを
入力できますが、違い、使い分けについて教えてほしいです。
どれにコードを書いていけばいいか分からず困っています。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんばんは。
一応、前のご質問からすると、「マクロの入門者」ですとなっていましたが、私も、入門時にはさっぱり分かりませんでしたね。
大きく別けると、三つに分かれると思います。
・標準モジュール
・クラスモジュール
・ローカルモジュール(≒オブジェクトモジュール)
(シート, UserForm, ThisWorkbook)
となっています。
「標準モジュール」に書いておくと、ちょうど、家の中で、家族全員が集まるような居間で、そこで声を掛けると、一通り、どこにでも声が届くようになっています。つまり、どこか特定のオブジェクトに関連付けられておりません。個々のオブジェクト(シートやUserForm)からでも、自由に取り出しが利きます。Excelでは、基本的には、「標準モジュール」に書いてください。時々、シートモジュールなどに、ごちゃごちゃ書く人がいますが、それは間違いです。
「標準モジュール」に書けば、シートを転々と動かしても、その親オブジェクトは、指定しなければ、ActiveSheet になっています。「ローカルモジュール」では、違う場所の場合は、シートなどを指定しなくてはなりません。そうしないとは、エラーが出ることが多いです。
そういう点で、「標準モジュール」は、ローカルに対して、「グローバル」だと思ってよいと思います。共通する定数や変数を置く場合も、そこに書きます。(厳密な意味での「グローバル」というのは、また違いますから、いずれ、あのとき、掲示板の回答者の言ったことはウソだったなんて思わないでください。「グローバル」というのは、本当に、どこからでも、ということになるのですが、一般的な方法では、同じブック内だけしか呼び出しが利かないと思ってください。)
「ローカルモジュール」は、その親オブジェクトが、シート(Sheet1)だったり、UserFormだったりします。ThisWorkbook というのは、そのブック全体の入り口のような場所です。多くは、その親オブジェクト固有のコードが多く、イベント・ドリブン型と言って、オブジェクト自体を操作したときに起動することで動かすマクロのために使います。
UserForm も同じです。UserForm のそれぞれのコントロール(ボタンやテキストボックスなど)を動かすときに起動するマクロを書き込みます。
「クラスモジュール」は、それ自身が、固有のオブジェクトとなり、プロパティやメソッドを記述することが可能です。オブジェクトの設計図のような場所で、オブジェクトの動作をコントロールすることが出来ます。例えば、新しいブックを開いたときに、デフォルトをユーザーの思うような仕様にしたいというようなことも、機能的に許されれば可能です。
しかし、「クラスモジュール」は、Excelでは多くは、上記のローカルモジュールと同じようなイベント・ドリブン型の、ユーザー設定したものを、コントロールに付け加えるときが多いです。
No.2
- 回答日時:
普通初学者はModule1にコードを書く。
イベント(何何した(事象が起こった)ときのチャンスを捉える)場合、はその事象の起こるシートのSheetXを選ぶ。
ユーザーフォーム(台紙)を使う場合はUserForm1
クラス モジュール は当面対象外。
No.1
- 回答日時:
> どれにコードを書いていけばいいか分からず困っています。
というレベルであれば、標準モジュールに書いておけば間違いないです。
そのうちに、シートモジュールとかのことを徐々に勉強していくことになると男観ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
Excel VBAでリンク切れをチェッ...
-
モジュールとクラスの違いって...
-
Excel VBA 定義されたプロージ...
-
Excelで時刻になったら知らせて...
-
グラフのX,Y座標を取得したい
-
vba 標準モジュールインポート...
-
VB.NETでの他アプリケーション...
-
VBAのモジュールについて教えて...
-
Apache2 静的・動的モジュール...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAで、ユーザーフォーム...
-
VBAで別モジュールへの変数の受...
-
VBA モジュールを閉じるショー...
-
モジュールとは何ですか
-
Access VBA標準モジュールにつ...
-
ExcelVBA:パブリック オブジェ...
-
VBA ユーザーフォーム Image1 ...
-
関数の引数にクラスを使いたい
-
excel vba です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
モジュールとは何ですか
-
VBA This Workbookモジュール...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォーム...
-
Form間の値の渡し方
-
モジュールとクラスの違いって...
-
Access VBA標準モジュールにつ...
-
本当にPublicな変数(配列で)
-
標準モジュールを削除したい。(...
おすすめ情報