Excel VBAについてご質問します。
プロジェクトの項目を見ると、
Sheet1
ThisWorkbook
標準モジュール
などさまざまあると思います。
これらに対して、どこにコードを書いていくべきなのかがわかりません。
例えば、Sheet1にボタンを配置して、それがクリックされたときの動作についてはSheet1に書けばいいのだと思います。
ですが、いろんなシートのコード、フォームのコードなどから呼び出される関数はThisWorkbookか標準モジュールのどちらに書けばいいのか悩んでいます。
それ以外のケースも含めて、一般的にこういう風に使い分けをするというのがありましたら、ぜひ教えてください。
よろしくお願いいたします。
No.1
- 回答日時:
通常のコードは標準モジュールに記入します。
他のシートやイベントで共用される関数やサブルーチンなども同様です。
共用しないコードならシートやThisWorkbookに書いても問題は無いでしょう。
標準モジュールに書いたコードはメニュー([ツール]-[マクロ])から一覧で参照されますが、モジュールの先頭に「Option Private Module」と記入しておくとそのモジュールに書かれたマクロが一覧に表示されなくなります。
(一覧に表示されないだけで、他のモジュールから呼び出す事も、マクロボタンに割り付ける事も出来ます。)
コードが多くなって来た場合など、メインのマクロ名だけを表示させておく場合などに便利かと思います。
ご回答ありがとうございます。
共有するしない、メニューに表示させるかどうかで使い分けがあるのですね。
なんとなくイメージができてきました。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
最初。
もしくは、小さいものならば、Sheet1にボタンを配置して、それがクリックされたときの動作についてはSheet1に、Workbookが開かれたとか閉じられたとかの動作の場合はThisWorkbook書けばいいです。慣れてきた。もしくは、やや規模が大きくなってきたならおそらく同じような処理を複数の箇所にコピペして書く事がいやになってきているはずなので、標準モジュールに区分けして書きます。
また、この頃には同じような箇所の修正なのに全部直すの!?も経験しているはずなので、この点に置いても一箇所にまとめて書くくせがあるといいです。
また、もしかしたらこの頃から使いまわせる共通関数群なども出てきているかもしれません。
で、ある意味職業でやる。もしくは、なんでexcelでやるのか分からない^^;状態になれば、クラスの登場です。(※必ず必要なわけではありません。)
変数の初期化や、どのタイミングで変更されているかなど全体を把握しにくくなってきた場合にはクラスを使用し、パーツパーツに役割分担したほうが作りやすい、デバッグしやすい、保守しやすいです。
また、意識的に他でも使用できるものを作成したりします。
このころには、大域変数使うなっつってんだろーぼけーを経験しているはずです^^;
この文章でわからない事があれば、まだその機能を使う段階ではないという事だと思われます。
無理やり使用してもあまりいい事はないと思いますので、別にSheet1やThisWorkbookに書けばいいと思います。
以上。参考になれば。。。
ご回答ありがとうございます。
No.1さんの回答である程度イメージはできたのですが、それでもまだ疑問に思っていた箇所がすっきりしました。
Sheet1とThisWorkbookはそういう使い分けをすればいいのですね。
クラスは一部で利用しています。
理由は以前C++をかじったときに感じた、関数が種類別(例えばファイル操作など)で固まっていると便利だなぁ、と思ったからなのですが。
あんまり使う理由としてはよくないのかもしれませんね^^;
それと、大域変数(グローバル変数ということで間違いないでしょうか?)はついつい使ってしまいます・・・。
極力使わないで済ませたいのですが、どうしても苦し紛れに使うことが・・・。
まだまだ全体の構成を考える力が足りないですね。
長文になりましたが、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Excel(エクセル) 複数のExcelブックのシート1の内容を1つのExcelブックにコピー貼り付けたいのでvbaコードを 7 2023/02/10 23:20
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
関連するカテゴリから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な変数(配列で)
-
標準モジュールを削除したい。(...
おすすめ情報