二つのワークシートがあり、特定の行から2行ずつ1行飛ばしでデータをコピー、ペーストしたいと
思っています。
VBA初心者なのでインターネットで調べながら下記のようにして処理しようとしているのですが、
データ数が多い(3000行ぐらいある)ので、応答なしになるぐらい処理が遅いです。
処理を速く出来るように組み替えたいのですが、構文をご教授頂けないでしょうか?
・ワークシートDATA1をコピーしてワークシートDATAの同じ行に貼り付ける
・処理開始行は、Aセルの先頭から空白行を除いた+2行目(変数FirstRowを使っています)
・処理終了行は、Aセルの最終行(変数lastRowを使っています。
・2行ごとコピーしてペースト⇒1行空けて2行ごとコピーしてペースト⇒・・・
下記で例えば
FirstRow=57
lastRow=2247
の場合、
DATA1の59、60行目をコピーして、DATAの59、60行目にペースト
↓
DATA1の62、63行目をコピーして、DATAの62、63行目にペースト
↓
DATA1の65、66行目をコピーして、DATAの65、66行目にペースト
↓
を最終行まで繰り返しです。
Sub TEST1()
Dim lastRow As Long
Dim FirstRow As Long
Dim cnt As Integer
FirstRow = Sheets("DATA1").Columns("A").End(xlDown).Row
lastRow = Sheets("DATA1").Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayAlerts = False
For cnt = 0 To lastRow - FirstRow
Sheets("DATA1").Select
Rows(FirstRow + 2 + cnt & ":" & FirstRow + 3 + cnt).Copy '59,60
Sheets("DATA").Select
Rows(FirstRow + 2 + cnt & ":" & FirstRow + 3 + cnt). Select'59,60
ActiveSheet.Paste
cnt = cnt + 3
Next
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayAlerts = True
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは!
お示しのコードは行全体をコピー&ペーストになっていますが、
値だけの操作にしてみてはどうでしょうか?
一例です。
Sub Sample1()
Dim i As Long
Dim myStart As Long, lastCol As Long
Dim wS As Worksheet
Set wS = Worksheets("DATA")
With Worksheets("DATA1")
myStart = .Range("A1").End(xlDown).Row
For i = myStart + 2 To .Cells(Rows.Count, "A").End(xlUp).Row Step 4
lastCol = .Cells(i, Columns.Count).End(xlToLeft).Column
wS.Cells(i, "A").Resize(2, lastCol).Value = .Cells(i, "A").Resize(2, lastCol).Value
Next i
End With
MsgBox "完了"
End Sub
こんな感じで・・・m(_ _)m
ありがとうございます。
説明不足で申し訳ございません。
行ごとコピー、ペーストとしたかったのは、A列以外も含めてその行を丸ごとコピーしたかった為です。
(具体的には特定の列以降に数式が入っており、それをDATAに行ごとコピーしたかったのです)
ご教授頂きました中で、下記を行指定にすれば行けるでしょうか?
wS.Cells(i, "A").Resize(2, lastCol).Value = .Cells(i, "A").Resize(2, lastCol).Value
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで行ごとコピー、同じ行を...
-
PDFの一部を切り取って別のシー...
-
Excel 3列毎のセルを別の表に抽...
-
塗りつぶしの色をコピーするには
-
Excel フィルターを掛けた状態...
-
C+vのvは英語で何の頭文字...
-
WORDのグレー括弧って?
-
エクセルでコピーしたものをコ...
-
VBAのテキストボックスに文字列...
-
マイナスの場合「xxxx-」...
-
【エクセル】表の中の文字だけ...
-
コピーされたセルの文字が途中...
-
ExcelのVBAでChromeの画面を全...
-
セルに値がある行のみを抽出す...
-
Excel2010 図としてコピー ショ...
-
エクセルでマクロにてセル色と...
-
Adobe Acrobat DCのスナップシ...
-
エクセルVBAでコピーすると行の...
-
ペーストのVって
-
EXCEL 1つ飛ばしのセル参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで行ごとコピー、同じ行を...
-
塗りつぶしの色をコピーするには
-
PDFの一部を切り取って別のシー...
-
【エクセル】表の中の文字だけ...
-
C+vのvは英語で何の頭文字...
-
Excel 3列毎のセルを別の表に抽...
-
WORDのグレー括弧って?
-
VBAのテキストボックスに文字列...
-
エクセルでコピーしたものをコ...
-
コピーされたセルの文字が途中...
-
セルに値がある行のみを抽出す...
-
EXCEL 1つ飛ばしのセル参照
-
Excel関数について質問ですm(__)m
-
数式による空白を無視して最終...
-
Adobe Acrobat DCのスナップシ...
-
空白行を無視してコピーするマ...
-
エクセルでマクロにてセル色と...
-
マイナスの場合「xxxx-」...
-
コピー&貼り付けの仕方を教え...
-
セルから一部だけを抜き出して...
おすすめ情報
すみません。
ValueをFormulaに変更したら意図通りに動作しました。
ありがとうございました。