Vba 要复制到新图纸的高级过滤器
我正在尝试自动筛选列,并将所有唯一值复制/粘贴到新的工作表中。下面是我一直在使用的代码,但是在运行代码时我遇到了这个错误: 运行时错误“1004”:提取范围缺少字段名或字段名无效Vba 要复制到新图纸的高级过滤器,vba,excel,Vba,Excel,我正在尝试自动筛选列,并将所有唯一值复制/粘贴到新的工作表中。下面是我一直在使用的代码,但是在运行代码时我遇到了这个错误: 运行时错误“1004”:提取范围缺少字段名或字段名无效 Sub Filter() Application.ScreenUpdating = False Dim x As Range Dim rng As Range Dim last As Long Dim sht As String 'specify sheet name in which the data is s
Sub Filter()
Application.ScreenUpdating = False
Dim x As Range
Dim rng As Range
Dim last As Long
Dim sht As String
'specify sheet name in which the data is stored
sht = "Filter This"
'change filter column in the following code
last = Sheets(sht).Cells(Rows.Count, "C").End(xlUp).Row
Set rng = Sheets(sht).Range("A1:H" & last)
Sheets(sht).Range("C1:C" & last).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("AA1"), _
Unique:=True
For Each x In Range([AA2], Cells(Rows.Count, "AA").End(xlUp))
With rng
.AutoFilter
.AutoFilter Field:=3, Criteria1:=x.Value
.SpecialCells(xlCellTypeVisible).Copy
Sheets.Add(After:=Sheets(Sheets.Count)).Name = x.Value
ActiveSheet.Paste
End With
Next x
'Turn off filter
Sheets(sht).AutoFilterMode = False
With Application
.ScreenUpdating = True
.CutCopyMode = False
End With
End Sub
您可以使用集合筛选出唯一项,而不是使用高级筛选器
Sub UsingCollection()
Dim cUnique As Collection, ws As Worksheet, fRng As Range
Dim Rng As Range
Dim Cell As Range
Dim sh As Worksheet
Dim vNum As Variant
Set sh = ThisWorkbook.Sheets("Filter This")
Set Rng = sh.Range("C2:C" & sh.Cells(sh.Rows.Count, "C").End(xlUp).Row)
Set cUnique = New Collection
On Error Resume Next
For Each Cell In Rng.Cells
cUnique.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0
For Each vNum In cUnique
With sh
Set fRng = .Range("C1:H" & .Cells(.Rows.Count, "C").End(xlUp).Row)
End With
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
With ws
.Name = vNum
With fRng
.AutoFilter Field:=3, Criteria1:=vNum
fRng.Copy ws.Range("A1")
End With
.AutoFilterMode = False
End With
Next vNum
End Sub
advancedfilter希望提取范围中的标题与源数据中的标题匹配。在您的案例中,AA1应该具有与C1
Range([AA2]相同的文本,单元格(Rows.Count,“AA”).End(xlUp))
将导致错误。使用范围(“AA2”,单元格(Rows.Count,“AA”).End(xlUp))
而不是烦扰的爸爸-要详细说明吗?抱歉,我是advancedfilter的新手。汤姆-谢谢你的意见。高级过滤器使用三个范围:数据源、条件范围和目标。它将数据源中所有符合条件的行提取到目的地中——它通过列标题计算出在何处应用条件以及在目的地中放置哪些列的方式。在您的例子中,您正在将所有行(但唯一值)从C复制到AA,但这两个范围仍然需要列标题。在您指示的地方我没有收到错误,但确实收到了@Tom指示的错误,当我如他所述更改行时,我没有收到错误。对于范围内的每个x(范围(“AA2”)、单元格(rows.Count,“AA”)。End(xlUp))