下記3つのコードを作りました。
sample3は、コピー、貼り付けの操作を1回で行っているので、一瞬で処理が終わります。
しかし、sample1では数十秒もかかってしまいます。また、sample2については、1秒程度です。sample1とsample2とでは、どうしてこのような処理速度の違いが出るのでしょうか。

実際の使用場面では、複数のセルをまとめてコピーする事はなく、条件に該当するセルが見つかったら、そのデータを他のシートの指定したセルに値のみを貼り付ける使い方をします。
その場合、処理速度の短縮をするには、下記コード、または、その他の方法でどのようにコピー貼り付けをするのがいいのでしょうか。

ご回答よろしくお願いします。

Sub sample1()
Dim i As Integer
For i = 1 To 10000
Cells(i, 1).Copy
Cells(i, 2).PasteSpecial Paste:=xlPasteValues
Next
End Sub

Sub sample2()
Dim i As Integer
For i = 1 To 10000
Cells(i, 2) = Cells(i, 1)
Next
End Sub

Sub sample3()
Dim i As Integer
Range(Range("a1"), Range("a1").End(xlDown)).Copy
Range("b1").PasteSpecial Pase:=xlPasteValues
Application.CutCopyMode = False
End Sub

A 回答 (1件)

sample1 と sample2 の違い


Copyは、セルの塗りつぶし等セルの情報の全てメモリーに入れます。
処理が2行あります。
Cells(i, 2) = Cells(i, 1) は
Cells(i, 2) .Value= Cells(i, 1).Value を省略していますので値だけの情報です。
処理も一行ですんでいます。

sample1、sample2 と sample3 の違い
繰返しがありません。

最もパソコンに負担をかけないのは
Sub sample3()
Range("B1:B" & Range("a1").End(xlDown).Row).Value=Range("A1:A" & Range("a1").End(xlDown).Row).Value
End Sub
では、ないでしょうか。
これでも、Range("a1").End(xlDown).Row を二度実行しているので
変数に入れた方が良いのか、どうかは微妙な所です。
    • good
    • 0
この回答へのお礼

「.PasteSpecial Paste:=」の部分で、いろいろな貼り付け方法が指定できるので、「Copy」はセルのすべての情報をコピーするということになり、その分、負荷がかかるのですね。
教えて頂いたコードを実行すると、一瞬で処理が終わりました。「=」は、値をメモリーに入れずに処理をしているので早く処理が出来るのですね。
ご回答ありがとうございます。

お礼日時:2017/07/11 21:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング