• ベストアンサー
  • 困ってます

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

  • 質問No.7968822
  • 閲覧数3231
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 88% (31/35)

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

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 44% (4312/9714)

他カテゴリのカテゴリマスター
プロシージャが大きすぎるのだったら,分割すればよいでしょう。
Sub Main
Call Sub1
Call Sub2
End Sub
Sub Sub1
'
End Sub
Sub Sub2
'
End Sub
お礼コメント
goicchan

お礼率 88% (31/35)

ありがとうございました。
助かりました。
投稿日時:2013/02/28 14:44

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 57% (465/803)

こんばんは。

前に書いていた方たちと内容は重複しますが、2013になったところで、エラーが出て変わらないと思います。個々のメモリの割り振りは、そんなに変わらないと思います。

私のExcelで作ったシステムは、数万行あるはずですが、なんの支障もありません。
ただ、1プロシージャは、百行以内で留めるべきで、それを機能別に、モジュールに別けていくようにします。例えば、画面制御するとか、テキスト処理するとか、シート処理とか。構造化します。しかし、あまりモジュールをどんどん増やすのは良くありません。管理ができなくなるからです。

プログラム自体が、2000行では、そもそも修正も利かないはずです。
2000行というのは、記録マクロで作り上げたもののような気がしますが、それは、無駄が多いはずですから、本格的なプログラミングを学ばないとコンパクトにならないかもしれません。

#2さんの話、64K って、昔の初期のコンパイル後の制限だったような気がしますが、VBAは当時のままを残しているようですね。オプションの順次コンパイルにするか、しないかで多少は変わるかもしれませんが、2000行の、一つのプロシージャでは、あまり期待できませんね。
お礼コメント
goicchan

お礼率 88% (31/35)

ありがとうございました。
投稿日時:2013/03/15 09:19
  • 回答No.2

ベストアンサー率 50% (1224/2411)

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

お礼率 88% (31/35)

ありがとうございました。
大変参考になりました。
投稿日時:2013/02/28 14:43
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ