Excel VBAにおいて(他のプログラミングにも通じることでしょうが)、変数は可能な限り、プロシージャレベルを使うようにしています。
やはり上手な人は、プロシージャレベルの変数を中心に使い、モジュールレベルやパブリックレベルの変数はあまり使わないものでしょうか。
モジュールレベル・パブリックレベルの変数って、一番上に沢山書いていくと、プロシージャを記述するスペースを下に追いやってしまい、ソースが見苦しくなる気がします。上手な人は、そういうモジュールレベル・パブリックレベルの変数をいたずらに増やさないようにする、良い方法とかを持っているのでしょうか?それとも、上手な人でも、モジュールレベル・パブリックレベルの変数は、多くなる時は物凄く多くなったりするのでしょうか?
No.1ベストアンサー
- 回答日時:
> モジュールレベル・パブリックレベルの変数って、一番上に沢山書いていくと、プロシージャを記述する
> スペースを下に追いやってしまい、ソースが見苦しくなる気がします
根本的な問題はそれではありません。
スコープ(つまり変数やメソッドなどの宣言部分)適用範囲が広くなればなるほど、
明確な責任範疇がわからなくなり、結果的に悪品質・バグの生み出し易いものが
出来上がるからです。
VBAでは各シート、標準モジュール、クラスが使えると思いますが、
最も悪なのは、以下がすべて当てはまることでしょう。
・何か処理を書きたい時に、何かにつけていつも標準モジュールを利用している。
・スコープの狭くていい変数、メソッドすらPublicに定義している。
・関係性のない変数、メソッドを全て同一の標準モジュールに組み込んでいる。
綺麗に書こうとする人たちは、まずそれがどういった分類にカテゴライズされるものなのかを
明確に切り分け、更にそれぞれの命令の責任範疇を明確にします。
責任範疇を切り分けて処理を細分化することによって、障害が発生した際の障害位置の特定と、
他のロジックへの影響力を小さくするからです。
上手な人は恐らく、よほどのことがない限り、変数が多くなるということはありません。
なぜなら、責任範疇を切り分けている時点で、変数の使用が限られるからです。
それでも変数が多くなる時は、それぞれの変数がどういった分類にカテゴライズされるのかを
再考し、クラスやメソッドを切り分けるべきか、1つのカテゴライズされた変数を1つ定義するか
などとなります。
こういった事柄は、一人でやっていても身に付きません。
なぜなら、一人さえ覚えていればなんら問題がないからです。
一人でやるとき、他人がコードを修正する、もしくは拡張して何かを追加する時には
どういったコードだと分かりやすいか、それを念頭に考えれば少しずつ綺麗になるし、
上手い人はどういうコードを書くのか、ネットで調べるのも勉強になります。
ありがとうございます。他人の書くコードをネットで見たりはしているのですが、サンプルのダウンロードなどもしてみようと思います。標準モジュールばかり利用していますが、それも考えなおしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
WPFでCanvas の子要素にアクセ...
-
JDBCとJDBCドライバのライブラ...
-
用語の意味の違いを教えてくだ...
-
Form2の変数をForm1に渡す方法...
-
twitterAPIについて
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
VBAがブレークモードになっ...
-
実行時エラー 438になった時の...
-
VBA(エクセル)で自動的にボタン...
-
「Columns("A:C")」の列文字を...
-
ユーザーフォームを表示中にシ...
-
パソコンへの「Dropbox...
-
オブジェクトが見つかりません
-
VBAでのエラー
-
ユーザーフォームのテキストボ...
-
VBAでユーザーフォームを再表示...
-
なぜこんな初歩的なVBAのIf文で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
Excel vbaで複数のテキストボッ...
-
用語の意味の違いを教えてくだ...
-
VB.netで、動的な型変換を行い...
-
WPFでCanvas の子要素にアクセ...
-
VB6で外部から静的アクセスが可...
-
VBA クラスにプロパティが実装...
-
C# Process.Start で標準入力
-
VBA オブジェクト追加
-
VBAで、Functionを、クラスモジュール...
-
VB.NETにて文字列で指定した関...
-
リフレクションはどういったも...
-
宣言とは違うオブジェクトを作...
-
コンポーネント指向って、どの...
-
Static Initializerについて
-
バウンドプロパティとは?
-
Mapに登録した値を登録した順に...
-
Windows8でのTomcatの自己アドレス
おすすめ情報