見た感じ、そんなに鈍重なコードではないように見えますが・・
貼り付け位置がAJ列と言うことですから、
「このコードのほかに何か処理」をさせていませんか?
その「他の処理」に関して動きが悪いのであれば何とも言えません。
ですので、とりあえず質問文からわかる範囲で。
> 前に残っている前回のデータを削除して
コレも「行全体を削除」なのか、貼り付けるべき「AJ:ATの範囲を消去」するのか
質問文からは判断できませんので、両方の可能性を見越して。
*「行全体を削除する」の場合
Sub 指定行削除()
For i = 2 To Sheets.Count
Sheets(i).Rows(5 & ":" & Cells(Rows.Count, 36).End(xlUp).Row).Delete
Next
End Sub
*「AJ:ATの範囲を消去する」場合
Sub 指定範囲消去()
For i = 2 To Sheets.Count
Sheets(i).Range("AJ5:AT" & Cells(Rows.Count, 36).End(xlUp).Row).ClearContents
Next
End Sub
どちらも元データシートが先頭に在ると仮定し、その他の全てのシートに処理をかけています。
このどちらかをコードの始めに持っていくと「今あるデータを削除(消去)して」先に進みます。
ちなみにエラーは考慮しておりません。
続いて
> 各シートで「累計売上」順(降順)に並べ替え
「マクロの記録」機能はご存知でしょうか。
単純にこの「降順に並べ替え」の処理を記録してやると
Selection.Sort Key1:=Range("AL6"), Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
こんな感じで記録されると思いますので、コレをちょっと書き直せば出来ますね。
ソレを先ほどの「削除」同様、対象の全シートで走るように手を加えれば良いです。
Sub 降順で並べ替え()
For i = 2 To Sheets.Count
Sheets(i).Range("AJ5").Sort Key1:=Sheets(i).Range("AL6"), _
Order1:=xlDescending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
Next
End Sub
同様に、元データシートが先頭に在ると仮定し、その他の全てのシートに処理をかけています。
これはコードの最後に付け加えてやれば良いですね。
これもエラーの考慮はしていません。
ちなみに、7000件でコチラで走らせてみましたが
消去~転記~並べ替えの作業を続けても1秒かからずくらいですね。
「速度」だけ考えると立派な数字だと思いますよ。
書き方は色々有るのかなぁ、とも思いますが、
質問文中の「コードの一部」だけでは判断できません。
悪しからずご了承下さいませ。
お礼
ありがとうございます。 言葉足らずなところがあり、ご迷惑をおかけいたしました。 >「このコードのほかに何か処理」をさせていませんか? 貼り付け位置以外には、関数が入っております。 しかしながら、貼り付け位置に手動で(オートフィルターなどを駆使し)貼り付けていたときは、ファイルサイズが3Mほどであったものが、なぜかマクロ組み入れ後に22Mとなっており、困っていたものです。 > 前に残っている前回のデータを削除して 「AJ:ATの範囲を消去する」という解釈であっております。 パーツごとに書いてくださり、とても分かりやすく勉強になります。 ありがとうございます。