0

「新しい検索」からセルを選択し、その範囲を「過去の検索」の最初の開いているセルに貼り付けるマクロがあります。私のコードは非常に効果的ではないと考えています。どうすればこれを改善できるかについて誰かアイデアがありますか?

Sub Macro5()
Range("A3:J3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Past Searches").Select
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Worksheets("New Searches").Activate
Application.CutCopyMode = False
End Sub
4

3 に答える 3

3

まず、操作するセル/ワークシートで .Select または .Activate を使用する必要はなく、直接参照するだけです。これにより、コードが本当に遅くなる可能性があります。

.Copy メソッドは Destination パラメーターを取ることができるので、他の場所で .Paste を使用する必要はありません。

また、.End プロパティはあまり信頼できません。代わりに UsedRange を使用することをお勧めします。

わずか1行でそれを行うことができます。

Worksheets("New Search").Range("A3:J3").Copy Destination:=Worksheets("Past Searches").UsedRange.Columns(1).Offset(1, 0)
于 2013-07-31T14:09:23.923 に答える
0

これを行うこともできるので、numofrows は必要ありませんか?

Worksheets("New Searches").Range(Range("A3:J3"), Range("A3:J3").End(xlDown)).Copy Destination:= _
Worksheets("Past Searches").Range("A1").End(xlDown)
于 2013-07-31T15:12:02.720 に答える
0

ファビオ、私を正しい方向に向けてくれてありがとう。その混乱を簡潔なコードに変えることはできなかったでしょう。

numofrows = ActiveSheet.UsedRange.Rows.Count`

Worksheets("New Searches").Range("A3", "J" + CStr(numofrows)).Copy Destination:=Worksheets("Past Searches").Range("A1").End(xlDown).Offset(1, 0)

これは私がする必要があることをやった。

于 2013-07-31T15:07:40.280 に答える