• ベストアンサー

エクセルマクロでの削除

エクセルマクロについて教えてください。 ファイルにシートが40シートあります。 1~35シートの同じ箇所を削除していきます。但し、36~40までは削除しません。 詳しく説明すると、 シート1のF8~BR9を削除→F16~BR17を削除→F24~BR25を削除。 次に、シート2のF8~BR9を削除→F16~BR17を削除→F24~BR25を削除。シート3のF8~BR9を削除→F16~BR17を削除→F24~BR25を削除。これをシート35まで繰り返します。 これを記録させて実行させてみたのですが、プロシージャが大きすぎます。というエラーメッセージが表示されます。 これを解決する方法を教えて下さい。 但し、シート36~シート40は削除しません。 宜しくお願いします。

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

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

原因は、記録マクロで記述したプログラムが長すぎることにあります。 1枚分の削除処理をForループで繰り返すようにすれば、コード量を減らせます。(#1さんのコードがそれですね) プログラムを触る自信がなければ、記録マクロを複数に分割すれば大丈夫かと。 ★おまけ★ そのようなエラーが出たこと無かったのでどのくらいでエラーが出るのか試してみました。 Dim i As Integer i = 1 i = 1 i = 1 ・・・・ というように、ひたすら i に 1 を代入する処理を書いていったところ、9352回目でエラーが出ました。

その他の回答 (3)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

マクロについてはすでに言われていることなので省略します。 この場合シート1からシート35をグループにして問題のところを削除するだけでできます。 これぐらいならマクロの記録でも大丈夫でしょう。

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

マクロの記録をして、それを利用する常識を、質問者はわかっていません。 まず1枚のシートでの処理のマクロの記録をとるのです。 そのコードを良く見て、それらの各行がどういう意味(処理)か勉強します。 そこでシートが別のシートに変わったら、どの部分を変えれば良いか、見当をつけます。 そしてマクロの記録を繰り返し実行に持ち込みます。 そのままでは同じもの(こと)が30回(など)行われて意味が無いので、何処か変えては、実行する、のパターンに持ち込まないといけません。 繰り返し回数は普通はシート枚数回(や他の例では行数回)です。 本件では処理対象外シートががありますが。 普通For NextやFor Each Nextを使います。 何処を変えるべきかは、判らなければ質問するほか無いでしょう。 しかし、どう変えるかは別にして、どこを変えるかぐらい判るはずです。これが判らないようでは、VBAのプログラムは組めません。 私は文章にして、じっくり考えることをお勧めします。 シートによって削除するセル範囲が違うときなど、別にコードを書き並べて連ねないでどうするか、今後の質問者の勉強課題です。

回答No.1

こんな感じでしょうか。 ・「削除」して「上」に詰める場合。 Dim i As Integer For i = 1 To 35 With WorkSheets("シート" & i) .Range("F24:BR25").Delete Shift:=xlUp .Range("F16:BR17").Delete Shift:=xlUp .Range("F8:BR9").Delete Shift:=xlUp End With Next ・「削除」が実は「消去」の意味の場合。 Dim i As Integer For i = 1 To 36 WorkSheets("シート" & i).Range("F8:BR9,F16:BR17,F24:BR25").ClearContents Next