• ベストアンサー

エクセルVBAが対応できるプログラムの大きさ

 エクセルVBAでプログラムの行数が2000行近くになるとプロシージャが大きすぎますとなり、実行できません。これには対処する方法はあるでしょうか。また、エクセル2013ではもっと大きなプロシージャにも対応しているのでしょうか。  よろしくお願いいたします。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

プロシージャが大きすぎるのだったら,分割すればよいでしょう。 Sub Main Call Sub1 Call Sub2 End Sub Sub Sub1 ' End Sub Sub Sub2 ' End Sub

goicchan
質問者

お礼

ありがとうございました。 助かりました。

その他の回答 (2)

回答No.3

こんばんは。 前に書いていた方たちと内容は重複しますが、2013になったところで、エラーが出て変わらないと思います。個々のメモリの割り振りは、そんなに変わらないと思います。 私のExcelで作ったシステムは、数万行あるはずですが、なんの支障もありません。 ただ、1プロシージャは、百行以内で留めるべきで、それを機能別に、モジュールに別けていくようにします。例えば、画面制御するとか、テキスト処理するとか、シート処理とか。構造化します。しかし、あまりモジュールをどんどん増やすのは良くありません。管理ができなくなるからです。 プログラム自体が、2000行では、そもそも修正も利かないはずです。 2000行というのは、記録マクロで作り上げたもののような気がしますが、それは、無駄が多いはずですから、本格的なプログラミングを学ばないとコンパクトにならないかもしれません。 #2さんの話、64K って、昔の初期のコンパイル後の制限だったような気がしますが、VBAは当時のままを残しているようですね。オプションの順次コンパイルにするか、しないかで多少は変わるかもしれませんが、2000行の、一つのプロシージャでは、あまり期待できませんね。

goicchan
質問者

お礼

ありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

http://msdn.microsoft.com/ja-jp/library/aa240819%28v=VS.60%29.aspx に、 The amount of code that can be loaded into a form, class, or standard module is limited to 65,534 lines. A single line of code can consist of up to 1023 bytes. Up to 256 blank spaces can precede the actual text on a single line, and no more than twenty-four line-continuation characters ( _) can be included in a single logical line. フォーム、クラス、標準モジュールにロードすることができるコードの量は65534行に制限される。単一のコード行は1023バイトまで構成できる。 とある。 また、 There is no limit on the number of procedures per module. Each procedure can contain up to 64K of code. If a procedure or module exceeds this limit, Visual Basic generates a compile-time error. If you encounter this error, you can avoid it by breaking extremely large procedures into several smaller procedures, or by moving module-level declarations into another module. モジュールあたりのプロシージャの数に制限はない。各プロシージャは、64Kまでコード含めることができる。プロシージャまたはモジュールがこの制限を超えた場合、Visual Basicは、コンパイル時エラーを生成する。このエラーが発生した場合は、極端に大きなプロシージャをいくつかの小さなプロシージャにを分けるか、またはモジュールレベルの宣言を別のモジュールに移すことによってそれを避けることができる。 とある。 プロシージャに行数の制限があるわけではない。全体のサイズに制限がある。サイズはコンパイル後のサイズか。64Kはセグメントといったっけ?

goicchan
質問者

お礼

ありがとうございました。 大変参考になりました。