[[20141020141918]] 『マクロの記録をしたら「コンパイルエラー プロシ』(しゅう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロの記録をしたら「コンパイルエラー プロシージャが大きすぎます」と出てしまいます。』(しゅう)

30枚のシート内の入力値(10箇所以上)をワンボタンクリックで一斉消去したいのでマクロの記録で入力値を選んで消去していく作業をしたのですがボタンをクリックすると「コンパイルエラー プロシージャが大きすぎます」と出てしまいます。

記録する数が多すぎるのでしょうか? 
あまりに多くの入力値は消去ることはできないのでしょうか? 

他に方法が有ればお教え願います。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


質問ですが、消去する値や、セルは決まっていますか。
(デイト) 2014/10/20(月) 14:42

[[20100906145225]] 『モジュールのコード最大何行までかけますか?』(たん)
 のリンク先に下記がありますが、
http://msdn.microsoft.com/ja-jp/library/aa240819%28v=VS.60%29.aspx
 の中で、一番引っかかりそうなのは1行の長さは 1023 bytes でしょうか。

 行末がアンダースコア(_)で連結されているものは、全体で一行の扱いですので、
 長い行を探して修正してはどうでしょうか。

(Mook) 2014/10/20(月) 15:39


こんにちは。

誤解されている方が多いのですが、
マクロの記録は記録してそのまま使うようなものではありません。

処理に必要のないコードも記録されますので、まずはそれを消します。
といってもどこが不要かわかりませんから、記録にある英単語を逐一
ヘルプで調べたりネットで調べたりします。調べる目的は、その行を
消してしまって差し支えないか判断するためです。「なんか要らない
んじゃない?」程度に思えたら十分。この段階でコードを理解する必
要はありません。
要らなさそうな行をためしに消して見ましょう。

これでコードがゴソッと減ってくれればラッキーですが
そうでなかった場合は、記録する操作を変えて見ます。
たとえばA1セルを選択してデータ削除、D8セルを選択してデータ削除、
G3セルを選択してデータ削除、これを記録するとコードは6行ですが
A1セルとD8セルG3セルを選択してデータ削除、これなら2行です。
今度はかなり行数が減らせると思います。

( 佳 ) 2014/10/20(月) 19:49


 こんにちは

 > あまりに多くの入力値は消去ることはできないのでしょうか? 
 最近こういう形の質問をされるかたが増えたようですが

 こういう問いの立て方をしてしまうと、本当はできることでも
 自分ではできなくなってしまいます。せっかくの頑張りがもったいない
 なあと感じます。

 「あまりに多くの入力値はどうやって消去ることができるだろう」
 という問いを立てるほうが、建設的です。

( 佳 ) 2014/10/20(月) 20:01


「あまりに多くの入力値はどうやって消去ることができるだろう」
 という問いを立てるほうが、建設的です。

↑ 勉強になります。ありがとうございます。

因みに下記のようなコードです。

Sub 消去1()
'
' 消去1 Macro
'

'

    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("1推移表").Select
    Range("B36:G36,K36:P36").Select
    Range("K36").Activate
    Selection.ClearContents
    Sheets("2推移表").Select
    Range("L47,B36:G36,K36:P36").Select
    Range("K36").Activate
    Selection.ClearContents
    Sheets("3推移表").Select
    Range("M45:N45,B36:G36").Select
    Range("B36").Activate
    Selection.ClearContents
    Sheets("4推移表").Select
    Range("B36:G36,K36:P36").Select
    Range("K36").Activate
    Selection.ClearContents
    Sheets("5推移表").Select
    ActiveWindow.LargeScroll ToRight:=-1
    Range("B36:G36,K36:P36").Select
    Range("K36").Activate
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Sheets("6推移表(1)").Select
    Range("B19:G19,K19:P19,T19:Y19,B38:G38,K38:P38,T38:Y38").Select
    Range("T38").Activate
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Sheets("7推移表(2)").Select
    Range("B19:G19,K19:P19,T19:Y19,B38:G38,K38:P38,T38:Y38").Select
    Range("T38").Activate
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Selection.ClearContents
    Sheets("値値").Select
End Sub

(しゅう) 2014/10/20(月) 22:38


 横から失礼します。
 シートの1枚目が1推移表、2枚目が2推移表・・・最後のシート名が値値だとして

 Sub 消去1()

     Dim i As Long

     For i = 1 To Sheets.Count - 1
        Select Case i
            Case 1, 4, 5
               Sheets(i).Range("B36:G36,K36:P36").ClearContents
            Case 2
               Sheets(i).Range("L47,B36:G36,K36:P36").ClearContents
            Case 3
               Sheets(i).Range("M45:N45,B36:G36").ClearContents
            Case 6, 7
               Sheets(i).Range("B19:G19,K19:P19,T19:Y19,B38:G38,K38:P38,T38:Y38").ClearContents
         End Select
     Next

     Sheets("値値").Select

 End Sub

 Case 1, 4, 5とまとめてあるのは消すセルの条件が同じだからです。
 素人が作ったマクロですが参考にしてみてください。
(se_9) 2014/10/21(火) 10:01

 こんにちは。

 しゅうさんのコードを動かしてみましたがこちらではエラーにならないです。
 あ、アップされたコードはシート7枚分なので、7枚目のコードを
 あと23個コピーして都合30枚にして、シート名も適当に変更
 して試しました。

 うーん、困りました。
 8枚目以降も同じようなコードですよね。

 _
 次の3つを試してみていただけますか。
 1)新規ブックにこのプロシージャだけコピーして、
   ほかのブックは閉じて試しても同じエラーになるかどうか
   (シートは適宜増やしてください。データは入れなくて大丈夫です)
 2)モジュールを5つに分けて(シート6枚ずつ)それでも
   同じエラーになるかどうか
 3)コードの意味を調べて不要な行を削除しても変わらないか。

( 佳 ) 2014/10/21(火) 20:20


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.