Vba 筛选数据并将其移动到不同的图纸问题

Vba 筛选数据并将其移动到不同的图纸问题,vba,excel,Vba,Excel,我的代码的目标是通过“状态更改”字符串从工作表“数据”过滤列ABC复制数据,然后将此列和右侧的6列从此ABC列复制到工作表“解析”中 这里的问题是,有时ABC在第1列,有时在第2列。所以下面的代码不起作用:/因为只在第1列中查看 非常感谢 Sub Filter_and_move_data() Dim LastRow As Long With Worksheets("data") .Range("$A:$J").AutoFilter .Range("$A:$G").AutoFil

我的代码的目标是通过“状态更改”字符串从工作表“数据”过滤列ABC复制数据,然后将此列和右侧的6列从此ABC列复制到工作表“解析”中 这里的问题是,有时ABC在第1列,有时在第2列。所以下面的代码不起作用:/因为只在第1列中查看

非常感谢

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
这样就可以了;)

这样就可以了;)


要仅复制A-G行中的数据而不复制整行,请更改此行

.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")

要仅复制A-G行中的数据而不复制整行,请更改此行

.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的起始位置,则有两种选择:要么在函数中检测列ABC的范围,要么将此范围作为参数传递。然后,您必须为自动筛选设置正确的字段(如果需要,您还可以更正范围) 之后,您不需要像实际那样复制整行,只需复制接下来的六列。因此,您必须根据为ABC列找到的范围来确定要复制的范围。
以下是第一个解决方案的代码:

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

如果您不知道列ABC的起始位置,则有两种选择:要么在函数中检测列ABC的范围,要么将此范围作为参数传递。然后,您必须为自动筛选设置正确的字段(如果需要,您还可以更正范围) 之后,您不需要像实际那样复制整行,只需复制接下来的六列。因此,您必须根据为ABC列找到的范围来确定要复制的范围。
以下是第一个解决方案的代码:

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

对不起,我的问题不一样。请再看第一个问题。谢谢对不起,我的问题不一样。请再看第一个问题。谢谢对不起,我的问题不一样。请再看第一个问题。谢谢对不起,我的问题不一样。我更新了话题。我需要筛选的列有时在第一列,有时在第二列。。我需要把这一栏和该栏右边的下六栏复制到不同的工作表上。对不起,我的问题不一样。我更新了话题。我需要筛选的列有时在第一列,有时在第二列。。我需要把这一栏和该栏右边的下六栏复制到不同的工作表上。对不起,我的问题不一样。我更新了话题。我需要筛选的列有时在第一列,有时在第二列。。我需要把这一栏和右边的6栏复制到另一张纸上。