我试图在复制的每一行上加一个条件。我想要所有唯一性,但前提是它们在另一个字段中也具有特定值。
这是我必须获取所有唯一性的方法(它可以工作),但是我不知道如何只获取J列中具有特定值的行。
r1.Columns(20).AdvancedFilter xlFilterCopy, , Sheet11.Range("A1"), unique:=True
我尝试做一个CriteriaRange,但是似乎语法不正确。另外,我考虑过一个If语句,但从逻辑上讲,这意味着它会在每次有真实语句时(而不是按行)触发整个列表。
这是我认为可能会起作用的方式。但是我收到类型不匹配错误。
r1.Columns(20).AdvancedFilter xlFilterCopy, r1.Columns(10).Value = "November", Sheet11.Range("A1"), unique:=True
有想法吗?
答案 0 :(得分:1)
首先,您的条件范围应为-Range
,其标题对应于要过滤的列,且条件在下面。例如,此快照中的D1:D2
:
第二,在同一步骤中过滤另一列(20
)时,您将无法仅复制单个列(10
)。
您可以将高级过滤器调整为
这样的事情(根据需要更改Sheet
和Range
引用):
Sub MyFilter()
Dim lastRow As Long
With Sheet1
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("A1:B" & lastRow).AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=.Range("D1:D2"), Unique:=True
With .Range("B1:B" & lastRow).SpecialCells(xlCellTypeVisible)
.Copy Sheet2.Range("A1")
End With
.ShowAllData
End With
End Sub
答案 1 :(得分:0)
为了能够保持代码的其他部分正常工作。我添加了一个隐藏工作表,并编写了一个宏以将过滤后的结果复制到新的隐藏工作表中。然后,我将原始代码与该隐藏工作表上的过滤数据相对应。
Sub FilterLiveToDataSheet()
' Unhide Required Sheets
Sheets("Original-Data").Visible = True
Sheets("Filtered-Data").Visible = True
' Delete Old Data
Sheets("Filtered-Data").Select
Cells.Select
Selection.ClearContents
' Copy Filtered Data
Sheets("Original-Data").Select
Range("TBL_ATTR_Spend[[#Headers],[HeaderName]]").Select
Selection.AutoFilter
ActiveSheet.ListObjects("TBL_ATTR_Spend").Range.AutoFilter Field:=10, _
Criteria1:="Delta"
Cells.Select
Selection.Copy
' Paste to Data Sheet
Sheets("Filtered-Data").Select
Cells.Select
ActiveSheet.Paste
' Unfilter Original Data Page
Sheets("Original-Data").Select
Range("TBL_ATTR_Spend[[#Headers],[HeaderName]]").Select
Selection.AutoFilter
' Hide Required Sheets
Sheets("Original-Data").Visible = False
Sheets("Filtered-Data").Visible = False
' Go to Results Sheet
Sheets("Results").Select