过滤并移动数据到不同的表单问题

我的代码的目标是从表“数据”过滤列ABC由“状态改变”string复制数据,然后复制此列和右侧从这个ABC列右侧的下6列表“parsing”这里的问题是,有时ABC是在第1列,有时在第2列。所以下面的代码将不会工作:/因为只是在第一列看起来

非常感谢。

Sub Filter_and_move_data() Dim LastRow As Long With Worksheets("data") .Range("$A:$J").AutoFilter .Range("$A:$G").AutoFilter field:=1, Criteria1:="Status Changed" LastRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _ Destination:=Sheets("parsing").Range("A1") End With End Sub 

这将做;)

 Sub Filter_and_move_data() With Worksheets("data") .Range("$A:$J").AutoFilter .Range("$A:$G").AutoFilter field:=1, Criteria1:="Status Changed" .AutoFilter.Range.Copy _ Destination:=Sheets("parsing").Range("A1") End With End Sub 

只复制行AG中的数据,而不是整行更改这一行

 .Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy _ Destination:=Sheets("parsing").Range("A1") 

进入这个:

  .Range("A1:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy _ Destination:=Sheets("parsing").Range("A1") 

如果您不知道列ABC的起始位置,则有两种select:要么检测函数中的列abc的范围,要么将此范围作为parameter passing。 然后,您必须为自动filter设置正确的字段(如果需要,也可以更正范围)。然后,您不需要像实际那样复制整行,而只需要复制下六列。 因此,您必须确定要复制的范围,具体取决于您为列ABC查找的范围。
以下是第一个解决scheme的代码:

 Sub Filter_and_move_data() Dim LastRow As Long Dim aCell As Range Dim columnsToCopy As Long columnsToCopy = 6 'determine where is located column abc between columns a and b (or whatever other range you need) With Worksheets("data").Range("a1:b1") Set aCell = .Find("ABC", LookIn:=xlValues) Debug.Print aCell.Address & " // " & aCell.Column End With With Worksheets("data") .Range("$A:$G").AutoFilter field:=aCell.Column, Criteria1:="Status Changed" LastRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range(Cells(1, aCell.Column), Cells(LastRow, aCell.Column + columnsToCopy)).SpecialCells(xlCellTypeVisible).Copy _ Destination:=Sheets("parsing").Range("A1") End With End Sub