Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13414 / 13646 ツリー ←次へ | 前へ→

【5434】プロシージャーが大きすぎ?とは Kent 03/5/13(火) 17:14 質問
【5521】3時間ですか(驚) こう 03/5/17(土) 14:03 回答
【5525】Re:3時間ですか(驚) ゆと 03/5/17(土) 15:50 回答
【5538】Re:3時間ですか(驚) りん 03/5/18(日) 9:46 発言

【5434】プロシージャーが大きすぎ?とは
質問  Kent E-MAIL  - 03/5/13(火) 17:14 -

引用なし
パスワード
   マクロについては素人なのですが出来れば教えてください。
3時間位かけてエクセルのマクロを記録したのですが、実際に実行しようとすると[コンパイルエラー プロシージャーが大きすぎます]というエラーがでます。
これはマクロの記録時間が長すぎたのか?だとしたらどの程度に記録を分割すればうまく
いくのか?
自分なりに色々本を見たりしたのですが結局解りませんでした。
どなたか宜しくお願いします。

【5521】3時間ですか(驚)
回答  こう E-MAIL  - 03/5/17(土) 14:03 -

引用なし
パスワード
   Kent さん,こんにちわ。
#レスがなかなかつかないですね...ということで

>3時間位かけてエクセルのマクロを記録したのですが、実際に実行しようとすると[コンパイルエラー プロシージャーが大きすぎます]というエラーがでます。
>これはマクロの記録時間が長すぎたのか?だとしたらどの程度に記録を分割すればうまく
>いくのか?

3時間も自動記録させたんですか...
当然その間に色々な操作をされたと思われますが,全ての操作が
マクロ記録されるため,コードが大量に出力されていると思います。
(記録時間が長いためではなく,その間の操作の情報が多量のため)

多量の自動記録マクロって,その後のメンテナンスなど大変ですので,
まず,何を何したいか設計を行い,自動記録は「マクロが不明な時に
どのようなコードで実現するのか確認する」程度の使用方法がよろし
いかと思います。

プロシージャーの限界サイズって確認したことが無いので不明です。
だれか知ってる?

【5525】Re:3時間ですか(驚)
回答  ゆと  - 03/5/17(土) 15:50 -

引用なし
パスワード
   こうさん、Kentさん,こんにちは。
過去ログをあさっていたら、だいぶ前にねこさんの投稿で
似たような記事が出てきたので、乗っけてみます。

〜〜Original Message〜〜
>コンパイルエラー”プロシージャが大きすぎます。”とメッセージが出ます
>。
>プロシージャの許容サイズはいくらなのでしょうか?
>行数に制限があるのか?それともファイルサイズ?何なのでしょうか?
>また、その回避方法を教えて下さい。
>宜しくお願いいたします。

プロシージャ、型、および変数
1 つのモジュールで使えるプロシージャの数には、特に制限はありません。
1 つのプロシージャには、最大 64KB のコードを記述することができます。
プロシージャやモジュールがこの制限を超えると、コンパイル時にエラーが発生し
ます。
このようなエラーが発生した場合は、大きなプロシージャを
複数のプロシージャに分割したり、モジュール レベルの宣言を別のモジュールに
移動することで、エラーを回避することができます。


VB5.0ですがBooksOnLineにからこんなの出てきました。
エクセルVBAも似たようなもんなんでしょうね 多分^^;

   でわでわ…

以上VB2よりの引用でした。
記録で三時間…。お疲れ様です。

【5538】Re:3時間ですか(驚)
発言  りん E-MAIL  - 03/5/18(日) 9:46 -

引用なし
パスワード
   ゆと さん、こうさん、Kentさん,こんにちは。

>このようなエラーが発生した場合は、大きなプロシージャを
>複数のプロシージャに分割したり、モジュール レベルの宣言を別のモジュールに
>移動することで、エラーを回避することができます。

たとえば
1行目を101行目にコピーする場合、
Sub Macro1()
  Application.Left = 44.5'EXCELウィンドウをうごかした
  Application.Top = 49.75'EXCELウィンドウをうごかした
  Rows("1:1").Select '1行目選択
  Selection.Copy 'Ctrl + C
  ActiveWindow.SmallScroll Down:=84 'ウィンドウをスクロール
  Rows("101:101").Select '101行目選択
  ActiveSheet.Paste 'Ctrl + V
End Sub

記録するとこんな感じですが、

↓実際必要なのはこれだけ
Sub Macro1()
  Rows("1:1").Copy Destination:=Rows("101:101")
End Sub

なので、いらない部分を削ってスリムにして、それでも大きい場合は分割すればいいかもしれません。

13414 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free