最近、私は定義された範囲を使用して、セルの選択、コピー、貼り付けの代わりにデータをコピーする方法を検討してきました。このようにして、コードのパフォーマンスとランタイムを最適化したいと考えています。VBA Excel - 列を正しい順序で範囲に入れよう
残念ながら私は自分で解決できない問題に直面してきました。
範囲を定義するときに、異なる順序で列を並べ替える必要があります。例えば
:私は範囲内に充填する列がシートに互いに背後にあるように
Set my_range = Sheets("Sheet1").Range("A2:E2,G2:H2,J2:K2,M2")
は、うまく機能します。私は新しいシートにこれらの範囲を満たしている場合
Set yo_range = Sheets("Sheet2").Range("D2,AV2,L2,H2,Q2,AE2,AG2")
yo_rangeが、私はそれにではなく、私がダウンして書かれた順番に入れて列を記入します。しかし、今、私はこれを持っています。それは元のものに従った順序でそれを置くでしょう。この例では、yo_rangeは、この順序でデータを新しいシートに入れます。
D2 | H2 | L2 | Q2 | AE2 | AG2 | AV2
どうすればこの問題を解決できますか?私は元のものよりも別のものにしたい。 また、あなたが見ることができるようにmy_rangeはyo_rangeより多くの列を持っています。 yo_rangeを新しいシートに埋め込むことはできますが、特定の時点で列を残しておくことはできますか?
my_range(A2:E2)、例えばA2に入る:E2を
yo_range(D2、AV2)が入る新しいシートに新しいシートにB、次いでCを残して新しいシートのD:Eにyo_range(L2、H2)を貼り付けてください
私は自分の問題をうまく説明でき、誰かが私を助けてくれることを願っています。どんな助けもありがとうございます。
編集:ここでは
は、新しいシートに範囲から値を置くのコードは
Do
If Application.WorksheetFunction.CountA(my_range) > 0 Then
my_range.Copy ws.Range("A" & ws.Rows.Count).End(xlUp).Offset(1, 0)
Set my_range = my_range.Offset(1, 0)
Else
Exit Do
End If
Loop
Do
If Application.WorksheetFunction.CountA(yo_range) > 0 Then
yo_range.Copy ws.Range("A" & ws.Rows.Count).End(xlUp).Offset(1, 0)
Set yo_range = yo_range.Offset(1, 0)
Else
Exit Do
End If
Loop
おそらくの代わりに、1つの範囲を定義し、Excelがあなたのためにそれの配置をneaten持つ、あなたを範囲(または各セル '.value')の配列を構築し、その配列をループする(または配列をシートに転置する)ことで、目的の出力を得ることができますか? –
範囲をコピーするのにどの正確なコードを使用していますか?私はあなたが.copy(dest)、.copy()、.pasteSpecial、を使用するかどうかによって、異なる結果が発生する可能性があることを発見しました...また、あなたのdestにどれくらいの細胞があるかによって、だから、あなたが使用している正確なコードを投稿してください... –
Glitch_Doctorが言及したように、私はその名前の範囲をいずれかの配列に保存するか、別々の列に貼り付ける列ごとに別々の範囲を設定するのが最も良いと思います... – Xabier