2017-01-03 5 views
0

ワークブック間でデータをコピーする最も良い方法は何ですか?私は与えられたワークブックのデータを "thisworkbook"にコピーするためのコードを以下に書いています。しかし、私はいくつかの問題に直面しており、これを行う正しい方法ではないと思っていますか?"xlPasteColumnwidths"にエラーがあり、私のコードがより効率的になりますか?

は、私は正確に何をしたいですか:

私は大量のデータを持っているでブックを持って、私は「はThisWorkbook」にそのワークブックからコピーされ、いくつかの与えられた範囲をしたいです。これらは、コピーされた後、私は私が持っているどのようなデータ

間のすべての空白行を削除したい:私はxlPasteColumnwidths」でエラーが出るのはなぜ

Application.ScreenUpdating = False 

Dim wb As Workbook 

Set wb = Workbooks.Open("path") 

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A1") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("B113:D117").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A106") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("F3:F107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("D1") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("F113:F117").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("D106") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

wb.Close False 

On Error Resume Next 

Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

Application.ScreenUpdating = True 

を、私はこのコードをより効率的に行うことができます

答えて

0
?あなたが個別に各操作を実行する必要があります、PasteSpecial操作で複数の列挙を持つことはできません

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A1") 
    .PasteSpecial xlPasteAll 
End With 

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A106") 
    .PasteSpecial xlPasteColumnWidths 
End With 

私はすべての問題を見ることができないパフォーマンスについてあなたのコードで。確かに、シート全体を配列に収めて見て、必要なビットを書き出すことができますが、これは単純なことのために過度のことです。

+0

ご協力いただきありがとうございます。たぶん、すべての範囲を一度にコピーして一度に貼り付ける方法はありますか?あなたは定数としてコピーレンジを設定できますか?私は2回の使用で終わらなければならないでしょう – Mick17

+1

残念ながら、不連続な範囲をコピーすることはできません。前に述べたように、使用範囲全体(B3〜F117)を非常に迅速かつ効率的な配列に入れ、必要な配列の部分を書き出すことができます。巨大なデータセットを知るのは良いことですが、セルへの読み書きは計算上非常に高価(遅い)ですが、ここでやりたがっていることはコードを書き直す価値がないため、おそらく数ミリ秒を節約します最も。 – Absinthe

関連する問題