• ベストアンサー

VBA Forネストのしすぎ

VBA Forネストのしすぎ 漠然とした質問で申し訳ないのですが VBAに限らず他の言語でも For のネストを多用する傾向にあり 4,5重になってしまい管理が煩雑になったり (他人から見て恐らく)分かりにくいソースになってしまいます 例えば、 ある要素のString一致を探して それを相対参照して一致を探しつつ 更に別のBooleanリストから値の一致を探す。。。 と言った具合です こういった複数の検索をスマートにコーディングする方法はあるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

抽象的すぎて、質問の意図がわかりにくい。 学が深くないので、自信はないが、関心はあり、一読を願う。 VBA程度では大した仕掛けはないが、SQLもVBSCRIPTの元で色んなソフトも 使える。それなりにソフトを作れば(MSや業者、識者、質問者でも)、エクセルVBAの元でも使えるソフトは作れる。 ・例えばデータベースなどで、SQL文で、WHERE句で3条件を書いて、該当のものレコードを求める場合、思考パターンとしては、多段ネストになると思うが、それを表に出さず、ユーザーに気づかせることはない仕組みを作っている。 ・また仕組み的に(事前に)インデックスを作っておいて、それを使うやり方ならForNextを使っているかどうかにかかわらず、意識させないのでは。 ・データの中から、該当を探すときに、シーケンシャルサーチ(時間がかかる)を使わないのは、どうしたらよいか、学問上の大問題と思うから、質問者が将来勉強するほかないと思うが。 基本的に下記と下記同士の組み合わせ ・総なめ法(シーケンシャルサーチ) 全部で・部分的で利用 ・ハッシュ法 ・インデックス(索引)作成法

その他の回答 (3)

  • okgoo3
  • ベストアンサー率74% (20/27)
回答No.4

VBA で作るコードは開発者が希望している特定の処理を実装するものなので、一つのプロシージャーに処理を詰め込みすぎてしまう事があります。 ドキュメントが整備されておらず、コメントだけですべてを語ろうとするケースでは、コードの読み手が業務そのものの知識をどれだけ持っているか、コードを読み解く言語知識がどれだけあるかによって許容できるコードの長さも変ってしまう。 気になるのであれば、ネストの深い部分にある処理を同じモジュールに private な Sub もしくは Function に切り分けると良いかと。 ただし分けることによるトレードオフも発生します。 プロシージャ間でどのようにデータを授受するか、エラー処理は発生したプロシージャ内で処理をしてしまって呼び出し元にはエラーが起きたことを返すのか、それともエラーそのものを呼び出し元に返して上位の呼び出しもとでエラー処理をするのか、などなど。 気になってくることが出てくるはずです。 そしてプログラミングの力量が付いてきた数年後にコードを読み返すと、「なぜこんなブツブツに処理を分断しているんだ。 このぐらい一気にやっちゃえよ」などと思ってしまったり。

  • hue2011
  • ベストアンサー率38% (2801/7250)
回答No.3

インデンテーションをきっちりすることです。 それだけで可視性は上がります。 VBAはスコープによって変数の有効範囲が違うなんていうことがありませんから、べたでタイプしてしまうんです。

回答No.1

思いつくのはこれかなあ /* C# */ for (int i = 0;i < 10;i++){ for(int j = 0; j < 10; j++){ for(int k = 0; k < 10; k++){ // 何か } } } ⇒ for (int i = 0;i < 10;i++){ for(int j = 0; j < 10; j++){ doSomething(list1); } } void doSomething(List<int> list1){ for(int i = 0; i < 10; i++){ // 何か } }

関連するQ&A