2017-07-31 12 views
-4

for..nextを使用してステップ間で範囲をコピーしたいのですが、for..nextステートメントの使用に慣れていません。私はここで、マクロでステップを記録しているコードです:"for .... next"を使用してペースト範囲をコピーします。

Sub Macro1() 
    Range("A2:A22").Select 
    Selection.Copy 
    Sheets("Sheet4").Select 
    ActiveSheet.Paste 
    Sheets("db_pivot").Select 
    Range("C2:C22").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet4").Select 
    Range("B2").Select 
    ActiveSheet.Paste 
    Sheets("db_pivot").Select 
    Range("E2:E22").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet4").Select 
    Range("C2").Select 
    ActiveSheet.Paste 
    Sheets("db_pivot").Select 
    Range("G2:G22").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet4").Select 
    Range("D2").Select 
    ActiveSheet.Paste 
End Sub 

あなたがステップでfor..next文でコードを変換してもらえますか?

+3

記録されたマクロを必要な形式に変換してから、自分で解決できない問題が発生した場合は、ここに来てください。 – Jarom

答えて

2

あなたは非連続列は1個の範囲内のグループにUninonを使用することができます。

Option Explicit 

Sub Macro1() 

Dim DBPivotSht As Worksheet 
Dim Sht4 As Worksheet 
Dim UnionRng As Range 

' get used to allways define your worksheet objects 
Set DBPivotSht = Worksheets("db_pivot") 
Set Sht4 = Worksheets("Sheet4") 

With DBPivotSht 
    Set UnionRng = Union(.Range("A2:A22"), .Range("C2:C22"), .Range("E2:E22"), .Range("G2:G22")) 
End With 

' copy the entire Union range and paste in "Sheet4" 
UnionRng.Copy Destination:=Sht4.Range("A2") 

End Sub 
+0

@Shai Radoあなたのコードが完璧に動作してくれてありがとうございます。 –

+0

@RyanChatoealaあなたは大歓迎です:) –

1

FOR ... NEXT文がなければ、私はこのコードを提案

With Sheets("db_pivot") 
    .Range("A2:A22").Copy Sheets("Sheet4").Range("A1") 
    .Range("C2:C22").Copy Sheets("Sheet4").Range("B2") 
    .Range("E2:E22").Copy Sheets("Sheet4").Range("C2") 
    .Range("G2:G22").Copy Sheets("Sheet4").Range("D2") 
End With 

HTH はジョン

+0

ありがとうございました@ジョン、あなたのソリューションは動作しています。私はコードをテストしましたが、私はUnionをより効率的に走らせるのに特に有効だと思います。 –

関連する問題