2016-04-18 8 views
0

VBAを初めて使用していて、範囲関数とオフセット関数の使い方を完全に理解していません。値に基づいてセルの範囲をコピーして別のシートに挿入する

ここに私が達成しようとしているものがあります。私は列 "A"から行 "4"で始まる "H"で製品と価格設定情報を持つワークシート "Sheet1"を持っています。列 "D"は入力された数量です。私はどの列に列 "D"の番号があるようにマクロを書くつもりです "B49"で始まる "Sheet4"にその行のセル "A"から "D"を挿入します。上書きしたくない "B49"の前後に情報がある行があります。

Sub Copy_And_Paste() 
' 
' Copy_And_Paste Macro 
' 
    Application.ScreenUpdating = False 

    LastRow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 

    For i = 4 To LastRow 

    If Cells(i, 4) > 0 Then 
    Range(Cells(i, 1), Cells(i, 4)).Select 
    Selection.Copy 

    Sheets("Sheet4").Select 
    Range("B49").Select 

    ActiveSheet.Paste 

    End If 

    Next i 
    Application.ScreenUpdating = True 
End Sub 

今それが唯一のコラム「D」の数との最初の行を貼り付けます。ここでは

は、私はセルをコピーしなければならないコードがあります。

+0

'へFor iステートメントを変更することで、望んでいたように動作させることができました。 "B49"の前と後の両方に情報を持つ行があります。私は上書きしたくありません。 – findwindow

+0

したがって、 "Sheet1"の列 "D"に数量を持つ10行がある場合、 "B50"の "Sheet4"に関する情報は "B60"になります。 –

+0

私はまだ理解していません:/あなたは行を挿入したいですか? – findwindow

答えて

0

私はそれが私がLastRow文を取り出し、「B49」で始まる

For i =10000 To 4 Step -1 
0

これは未テストです:

Sub Copy_And_Paste() 
    Application.ScreenUpdating = False 
    With Worksheets("Sheet1") 
     LastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     For i = 4 To LastRow 
      If .Cells(i, 4) > 0 Then 
       Sheets("Sheet4").Rows(49).Insert 
       .Range(.Cells(i, 1), .Cells(i, 4)).Copy Sheets("Sheet4").Range("B49") 
      End If 
     Next i 
    End With 
    Application.ScreenUpdating = True 
End Sub 
+0

Scott、これはうまくいきましたが、行を "B49"に挿入してシフトし続けるので、行が下から上に移動します。 "B49"に最初の行を挿入し、次に "B50"、次に "B51"などに挿入したいと思います。助けてくれてありがとう。 –

関連する問題