2014-01-12 19 views
5

VBAを初めて使用しています...この行の最初のセルにXと表示されている場合は、Sheet2からSheet1に行をコピーします。基準。 If条件にエラーがあります...修正方法がわかりません。別のシートに条件を満たすVBAコピー行

Sub LastRowInOneColumn() 
'Find the last used row in a Column: column A in this example 
    Worksheets("Sheet2").Activate 
    Dim LastRow As Long 
    With ActiveSheet 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    End With 
    MsgBox (LastRow) 
    For i = 1 To LastRow 
    If Worksheet.Cells(i, 1).Value = "X" Then 
    ActiveSheet.Row.Value.Copy _ 
    Destination:=Hoja1 
    End If 
    Next i 
End Sub 
+1

[オートフィルター](http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another- –

+1

もし私がプログラミングを知っていたら、私はVBAを学んでいます... 2日後):これは私がコードについて理解できる方法です... – Anca

答えて

6

ワークセットを指定する必要があります。変更ライン

If Worksheet.Cells(i, 1).Value = "X" Then 

If Worksheets("Sheet2").Cells(i, 1).Value = "X" Then 

にUPD:

は、次のコードを使用してみてください(それが最善のアプローチではありません@SiddharthRoutがAutofilterの使用について検討し、示唆したように。):

Sub LastRowInOneColumn() 
    Dim LastRow As Long 
    Dim i As Long, j As Long 

    'Find the last used row in a Column: column A in this example 
    With Worksheets("Sheet2") 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    End With 

    MsgBox (LastRow) 
    'first row number where you need to paste values in Sheet1' 
    With Worksheets("Sheet1") 
     j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 
    End With 

    For i = 1 To LastRow 
     With Worksheets("Sheet2") 
      If .Cells(i, 1).Value = "X" Then 
       .Rows(i).Copy Destination:=Worksheets("Sheet1").Range("A" & j) 
       j = j + 1 
      End If 
     End With 
    Next i 
End Sub 
+0

+1それは質問に答える:)しかし、間違いなく、それはループ内で行をコピーする最良の方法ではありません。上記のコメントで述べたように、 'Autofilter'がこれのための最良のものです。 –

+0

ありがとう、しかし、今私は後で新しいエラーが発生しました:ActiveSheet.Row.Value.Copy _ 宛先:= Sheet1 ....オブジェクトがこの妥当性またはメソッドを認めないと言います。 – Anca

+0

@SiddharthRout、私完全にあなたに同意する!この場合、オートフィルタが最適です。 –

0

フォーマット後前回の自分のコードへの回答では、AutoFilterで返された値を別のシートに貼り付けようとすると、必要なすべてのデータを効率的にコピーする方法が見つかりました。このブロックで

With .Range("A1:A" & LastRow) 
    .Autofilter Field:=1, Criteria1:="=*" & strSearch & "*" 
    .Offset(1,0).SpecialCells(xlCellTypeVisible).Cells.Copy 
    Sheets("Sheet2").activate 
    DestinationRange.PasteSpecial 
End With 

AutoFilterstrSearchの値を含むすべての行を検索し、他のすべての値を除外。次に、セルをコピーし(ヘッダーがある場合はオフセットを使用)、宛先シートを開き、宛先シートの指定された範囲に値を貼り付けます。

関連する問題