如果满足条件,如何将行复制到新工作表中?

作为领导,我是一个完整的noob当涉及到VBA,虽然我一直在尝试(失败?)学习。

如果列“I”包含某个字母(或短语),我试图将一行数据从一张表复制到另一张表中。 例如,我想要复制的数据位于名为“客户”的工作表上,如果第一列包含字母“T”,那么我希望这些数据可以自动导入到下一个名为“Tax – Pending”但有问题。 如果需要的话,我也可以考虑将第一栏中的文字改为更具描述性的。 我的数据从所有表格的第3行开始(前两行是标题)。

Sub CopyRow() Dim x As Long Dim iCol As Integer Dim MaxRowList As Long Dim S As String Set wsSource = Worksheets("Clients") Set wsTarget = Worksheets("Tax - Pending") iCol = 1 MaxRowList = wsSource.Cells(Rows.Count, iCol).End(xlUp).Row For x = MaxRowList To 1 Step -1 S = wsSource.Cells(x, 1) If S = "T" Then AfterLastTarget = wsTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1 wsSource.Rows(x).Copy wsTarget.Rows(AfterLastTarget).PasteSpecial Paste:=xlPasteValuesAndNumberFormats wsSource.Rows(x).Delete End If Next Application.ScreenUpdating = True End Sub 

如果你不需要格式化,这应该工作。 请注意,这将“复制”列中包含字母“T”的任何行。 换句话说,“1T”,“AT”,“TT”,“@T”或包含 “T”的任何组合都将被复制。

 Sub CopyRow() Application.ScreenUpdating = False Dim x As Long Dim MaxRowList As Long Dim S As String Dim wsSource As Worksheet Dim wsTarget As Worksheet Set wsSource = ThisWorkbook.WorkSheets("Clients") Set wsTarget = ThisWorkbook.WorkSheets("Tax - Pending") iCol = 1 MaxRowList = wsSource.Cells(Rows.Count, iCol).End(xlUp).Row For x = 3 To MaxRowList If InStr(1, wsSource.Cells(x, 9), "T") Then wsTarget.Rows(x).Value = wsSource.Rows(x).Value End If Next Application.ScreenUpdating = True End Sub 

如果你只想要“T”而没有别的,那就用

 If wsSource.Cells(x, 9) = "T" Then 

编辑:如果您将数据附加到目标工作表的底部然后更改if

 If InStr(1, wsSource.Cells(x, 9), "T") Then AfterLastTarget = wsTarget.Cells(Rows.Count, 1).End(xlUp).Row wsTarget.Rows(AfterLastTarget + 1).Value = wsSource.Rows(x).Value End If