Excel高级filterdynamic范围

我有一个内部网站的数据连接,抓取一个完整的网页,并将其导入到“DC”表。 从那里它通过使用下面的代码通过一个先进的过滤macros被移动到“登台”。 N1100不是最后一行的文本,它是一个任意数字,距离我的数据结尾还有一段距离。

Private Sub Worksheet_Change(ByVal Target As Range) Call Password_Unprotect Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("DC") Dim lrng As Range Set lrng = ThisWorkbook.Sheets("DC").Range("A158:N1100") Dim crng As Range Set crng = ThisWorkbook.Sheets("DC").Range("A158:N1100") Dim copyto As Range Set copyto = ThisWorkbook.Sheets("Staging").Range("A1:H1") lrng.AdvancedFilter xlFilterCopy, crng, copyto, Unique:=False 'Call password_protect End Sub 

我的问题是,每当我用于我的数据连接的网页改变它打破了我的先进的filter,因为我的标准开始轮class。 我正在寻找使先进的filter足够聪明,find它需要开始的行或删除每行上面,然后将数据移动到“分期”表。 需要注意的是,包含“分区”的单元在表单上是唯一的。 突出显示的行是高级filter的开始。

我已经上传了我的工作表中的一个小工具。
我已经上传了我的工作表的一个剪辑。

下面的代码应该让你find你想要的。 只需要遍历Column A来查找DEVICE文本,然后将其用作开始,然后在最后.End(xlUp) Column A上执行.End(xlUp)

另外请注意,请始终记住在所有工作表上使用Option Explicit ,以确保始终声明variables。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Call Password_Unprotect Dim DCSheet As Worksheet Dim lrng As Range Dim crng As Range Dim copyto As Range Dim StartRow As Long Dim ColACell As Range Dim LastRow As Long Set DCSheet = ThisWorkbook.Sheets("DC") LastRow = DCSheet.Cells(DCSheet.Rows.Count, "A").End(xlUp).Row 'Stopping at 300 will just save time if the text is not found 'if it is possible that the start row could be further down then increase the number For Each ColACell In DCSheet.Range("A1:A300").Cells If ColACell.Text = "DEVICE" Then 'Can have cross check for the IP text in Column B If ColACell.Offset(0, 1).Text = "IP" Then StartRow = ColACell.Row End If Next ColACell Set lrng = DCSheet.Range("A" & StartRow & ":N" & LastRow) Set crng = DCSheet.Range("A" & StartRow & ":N" & LastRow) Set copyto = ThisWorkbook.Sheets("Staging").Range("A1:H1") lrng.AdvancedFilter xlFilterCopy, crng, copyto, Unique:=False 'Call password_protect End Sub