Excel VBAにおいて(他のプログラミングにも通じることでしょうが)、変数は可能な限り、プロシージャレベルを使うようにしています。
やはり上手な人は、プロシージャレベルの変数を中心に使い、モジュールレベルやパブリックレベルの変数はあまり使わないものでしょうか。
モジュールレベル・パブリックレベルの変数って、一番上に沢山書いていくと、プロシージャを記述するスペースを下に追いやってしまい、ソースが見苦しくなる気がします。上手な人は、そういうモジュールレベル・パブリックレベルの変数をいたずらに増やさないようにする、良い方法とかを持っているのでしょうか?それとも、上手な人でも、モジュールレベル・パブリックレベルの変数は、多くなる時は物凄く多くなったりするのでしょうか?
No.1ベストアンサー
- 回答日時:
> モジュールレベル・パブリックレベルの変数って、一番上に沢山書いていくと、プロシージャを記述する
> スペースを下に追いやってしまい、ソースが見苦しくなる気がします
根本的な問題はそれではありません。
スコープ(つまり変数やメソッドなどの宣言部分)適用範囲が広くなればなるほど、
明確な責任範疇がわからなくなり、結果的に悪品質・バグの生み出し易いものが
出来上がるからです。
VBAでは各シート、標準モジュール、クラスが使えると思いますが、
最も悪なのは、以下がすべて当てはまることでしょう。
・何か処理を書きたい時に、何かにつけていつも標準モジュールを利用している。
・スコープの狭くていい変数、メソッドすらPublicに定義している。
・関係性のない変数、メソッドを全て同一の標準モジュールに組み込んでいる。
綺麗に書こうとする人たちは、まずそれがどういった分類にカテゴライズされるものなのかを
明確に切り分け、更にそれぞれの命令の責任範疇を明確にします。
責任範疇を切り分けて処理を細分化することによって、障害が発生した際の障害位置の特定と、
他のロジックへの影響力を小さくするからです。
上手な人は恐らく、よほどのことがない限り、変数が多くなるということはありません。
なぜなら、責任範疇を切り分けている時点で、変数の使用が限られるからです。
それでも変数が多くなる時は、それぞれの変数がどういった分類にカテゴライズされるのかを
再考し、クラスやメソッドを切り分けるべきか、1つのカテゴライズされた変数を1つ定義するか
などとなります。
こういった事柄は、一人でやっていても身に付きません。
なぜなら、一人さえ覚えていればなんら問題がないからです。
一人でやるとき、他人がコードを修正する、もしくは拡張して何かを追加する時には
どういったコードだと分かりやすいか、それを念頭に考えれば少しずつ綺麗になるし、
上手い人はどういうコードを書くのか、ネットで調べるのも勉強になります。
ありがとうございます。他人の書くコードをネットで見たりはしているのですが、サンプルのダウンロードなどもしてみようと思います。標準モジュールばかり利用していますが、それも考えなおしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(悩み相談・人生相談) 発達障害とかなんですかね… 1 2022/09/03 19:54
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Excel(エクセル) 2列のエクセルの表を変更したい 6 2022/07/01 11:19
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- 情報処理技術者・Microsoft認定資格 MOS試験Excelエキスパートを受けようか考えています。 Excelは仕事で使用。 関数は入れ子含 2 2022/12/18 10:05
- Visual Basic(VBA) VBAでWorkbook.addの使い方 3 2023/02/01 11:58
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VBA] Classから他のClassを呼...
-
共通モジュールでDBへの接続と...
-
VBAで、Functionを、クラスモジュール...
-
VB ブラウザ
-
実行時エラー 438になった時の...
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
ExcelVBA Range クラスの Page...
-
ADODB.Streamを使用してUTF-8を...
-
フォームの再読み込み
-
eclipseのデバッグ中に変数の値...
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォーム上に現在日時...
-
なぜこんな初歩的なVBAのIf文で...
-
Access VBA でデータペーストを...
-
テキストボックス(VBA)でEnter...
-
VBA listBoxから
-
どうやってもFor文を抜けてしま...
-
質問です。 場面緘黙症で苦しん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
Excel vbaで複数のテキストボッ...
-
用語の意味の違いを教えてくだ...
-
他のモジュールのプロシージャ...
-
VB.netで、動的な型変換を行い...
-
WPFでCanvas の子要素にアクセ...
-
VB.NETにて文字列で指定した関...
-
【JSF】バッキングビーンから別...
-
バウンドプロパティとは?
-
VBAで、Functionを、クラスモジュール...
-
VBA オブジェクト追加
-
Form2の変数をForm1に渡す方法...
-
コンポーネント指向って、どの...
-
VBA クラスにプロパティが実装...
-
シーケンス図について。
-
VBA モジュールレベル・パブリ...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
おすすめ情報