- ベストアンサー
Excel VBA プロシージャの種類の使い分け
VBAを勉強中です。 最初に読んだ参考書には、 プロシージャにはsubとfunctionの2種類があると書かれていたので 鵜呑みにしていたのですが、 また違う切り口から、privateとpublicが存在していることを わかり始めて来たところです。 シートにコマンドボタンなどをつけてコードを登録しようとすると 自動的にprivate subになるので、 ひとつのシートにくっついているものはprivate subで あまり他シートから使う必要がないんだなぁという認識なのですが、 まずこれが合っているのか不安なのと、 あと、たとえばまったく同じコマンドボタンを 2枚以上のシートにつける時、 各シートに同じVBAをひとつずつ記述するより、 標準モジュールにprivate subを記述したほうが良いのか、という事が 気になっています。 好き好きなのかも知れませんが、私がつくったものに 他の人が変更を加える可能性があり、できる限り見やすくしたいので、 一般的にはどうされているものなのかお教えくだされば幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
整理までに・・・ >プロシージャにはsubとfunctionの2種類があると書かれていたので subプロシージャ・・・処理の戻り値(結果)を返さない functionプロシージャ・・・戻り値を返す >privateとpublicが存在していること priveteとpublicの差はスコープ(適用範囲)が違うことpublicの方が広い >あと、たとえばまったく同じコマンドボタンを・・・ 複数のシートに、それぞれに同じ動きをするコマンドボタンを置きたいという意味でしょうか? 例えば、A.B各シートに同じ動作をするプログラムをそれぞれ書きました あるとき、動作が変更になったら、、メンテナンスする人は、 ・Aシートのプログラム と Bシートのプログラム両方とも修正しなければならなくなります。 私だったら・・・ ・標準モジュール内で、共通的な動きをするプログラムを作る ・各シートのコマンドボタンのイベントに、共通的なプログラムを呼ぶように、仕掛けをする 同じ動作をするプログラムを2箇所以上に書くと、動きが違うなどの混乱の元になります。 また、出来る限り短いプログラムで記述すると、間違いが防げます。 スコープは、最小限に。なんでもかんでもPublicにすると混乱します。 コメントは、丁寧に1行1行入れる必要は無いですが、 「どんな動きをする プロシージャなのか」を明確に。 スコープは基礎ですから、体得出来るように頑張ってください。 元VisualBasicプログラマーでした。
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
private にすると、同じモジュールからしか呼び出しが出来ません。 また、Private にすると、メニューのマクロ([ツール]-[マクロ]-[マクロ])にプロシージャ名は表示されません。 >ひとつのシートにくっついているものはprivate subで シートモジュールの場合は、(通常は)利用範囲が限定されるので自動的にPrivate に設定されます。 >各シートに同じVBAをひとつずつ記述するより、 標準モジュールにprivate subを記述したほうが良いのか プログラムとして正しく動作するならどこに書いても問題はありませんが、Privateにすることによって別のモジュールから呼び出しが出来なくなる場合があるので、その点をふまえて置き場所を決めて下さい。 >他の人が変更を加える可能性があり、できる限り見やすくしたいので、 一般的にはどうされているものなのかお教えくだされば幸いです。 モジュールやプロシージャのコメントをきちんと入れる。
お礼
ありがとうございます。 ああそうなのか!と思うことが色々ありました。 大変参考になりました。
お礼
ありがとうございました。 大変ていねいに書いてくださり、勉強になりました。 コマンドボタンのコードを標準モジュールに書いたものか、 シートモジュールに書いたものか、悩んでいましたが、 そうですね! 共通のプログラムを呼ぶようにする、というの・・・良いかも・・・ あとあと、コマンドボタンの動作を追っかけた人がいても、 それならわかりやすいかも・・・。 参考になりました!