下記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
No.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 を二度実行しているので
変数に入れた方が良いのか、どうかは微妙な所です。
「.PasteSpecial Paste:=」の部分で、いろいろな貼り付け方法が指定できるので、「Copy」はセルのすべての情報をコピーするということになり、その分、負荷がかかるのですね。
教えて頂いたコードを実行すると、一瞬で処理が終わりました。「=」は、値をメモリーに入れずに処理をしているので早く処理が出来るのですね。
ご回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL2007 各行列にmedian関数...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
UserForm1.Showでエラーになり...
-
Excel マクロ VBA プロシー...
-
配列数式の解除
-
メッセージボックスのOKボタ...
-
教えて下さい
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
String""から型'Double'への変...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
VBAでfunctionを利用しようとし...
-
Excel VBAからAccessマクロを実...
-
お助けください!VBAのファイル...
-
TERA TERMを隠す方法
おすすめ情報