我是VBA的新手...如果此行中的第一个单元格显示X,我想将Sheet2中的一行复制到Sheet1,然后对符合此条件的所有行执行此操作。我在If条件中有错误...我不知道如何解决它。
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
答案 0 :(得分:8)
您需要指定工作集。更改行
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
答案 1 :(得分: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
在此块中,AutoFilter
会查找包含strSearch
值的所有行,并过滤掉所有其他值。然后复制单元格(如果有标题,则使用偏移量),打开目标工作表并将值粘贴到目标工作表上的指定范围。