[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロの記録で書いたら処理が遅いです』(みやちゃん)
こんにちわ。よろしくお願いします。
飛び飛びのセルを300か所複数選択+コピーし(規則性あり)
位置情報はそのままに別のセルへ飛び飛びにペーストしたいのですが
飛び飛びの間のセルには計算式が含まれている為に
300行を塊でコピー&ペーストはできない状態です。
そこでマクロの記録をつかって以下のような
コードが吐き出されたのですが
いざ実行すると長くて長くて、、、
処理に時間がかかりすぎているので
なにかいい方法ないでしょうか?
Range("BC2:BE2").Select Selection.Copy Range("C2:E2").Select ActiveSheet.Paste Range("BC12:BE12").Select Application.CutCopyMode = False Selection.Copy Range("C12:E12").Select ActiveSheet.Paste Range("BC22:BE22").Select Application.CutCopyMode = False Selection.Copy Range("C22:E22").Select ActiveSheet.Paste Range("BC32:BE32").Select Application.CutCopyMode = False Selection.Copy Range("C32:E32").Select ActiveSheet.Paste Range("BC42:BE42").Select Application.CutCopyMode = False Selection.Copy Range("C42:E42").Select ActiveSheet.Paste
実際はこれを300回ほどくりかえしています。
できれば、シートもじゅーるに記載する Private Sub Worksheet_SelectionChange(ByVal Target As Range)ではなく
標準モジュールに記載するような形で
ファイルを開くときにauto_closeの際にcallで呼び出す感じをイメージしています。
< 使用 Excel:Excel2016、使用 OS:Windows8 >
あと、自動記録ではいちいちSelectが記録されますが、これを省くと少し速くなりますよ。
Range("BC2:BE2").Select Selection.Copy Range("C2:E2").Select ActiveSheet.Paste
↓
Range("BC2:BE2").Copy Range("C2:E2") (???) 2018/11/08(木) 17:28
Sub test() Dim i As Long
Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, "BC").End(xlUp).Row Step 10 Range(Cells(i, "BC"), Cells(i, "BE")).Copy Cells(i, "C") Next i Application.ScreenUpdating = True End Sub (???) 2018/11/08(木) 17:43
???さんと同じ発想(For〜Nextステートメントによるループ処理)ですが
Sub てすと() Dim MyRNG As Range, i As Long
Set MyRNG = Range("BC2:BE2")
For i = 0 To 300 Step 1 MyRNG.Offset(i * 10).Copy MyRNG.Offset(i * 10, -52) Next
End Sub
みたいに、一定間隔ならOffsetを使うのもありかな〜と思います。
また、上記の例示も300回セルに書き込みが発生するから、「Application.ScreenUpdating」の効果はあるとおもうんですけど、一応どういうことをしているのかだけは自主補習しておいてください。
以前、”おまじない”と称して意味が分からないまま使っている方がいらっしゃいました。
そういうことを続けていると、もっと複雑な処理を組んだ時に重大なバグを見落とすことにつながることが懸念されるので個人的には、安定動作が確認されるまでは、記述しない(コメントアウトさせておく)ことをおすすめします。
(もこな2) 2018/11/09(金) 01:15
もこなさんの
MyRNG.Offset(i * 10).Copy MyRNG.Offset(i * 10, -52)
でストップがかかってしまった(T_T)のですが
???さんのだとすんなりいきました^^
おふたかた、ありがとうございました。
もっと勉強します
(みやちゃん) 2018/11/09(金) 15:01
(みやちゃん) 2018/11/09(金) 16:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.