运行的过程:
Sub 高级筛选()
'
' 高级筛选 Macro
'
'
Cells.Select
Selection.Copy
Sheets("Non Pilot Data").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Cells.Select
Application.CutCopyMode = False
Range("A1:BI10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Pilot list").Rows("1:2"), Unique:=False
ActiveWindow.SmallScroll Down:=-21
Cells.Select
Selection.Copy
Sheets("Funding Data").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
现在更改pilot list数据了
之前是不等于那个list 数据,现在是等于那个数据
更改后结果只能出一个数据
需要等于pilot list 的所有数据
现在是等于list数据吗?
Sub 高级筛选()
Sheets("Non Pilot Data").Range("A1:BI10000").AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=Sheets("Pilot list").Range("A1:C2"), Unique:=False
End Sub
需要筛选的条件增加 既要等于A又要等于B 还要等于C
要把这些数据都找出来,怎么修改pilot list 呢?或者说怎么修改宏呢?
引用 皆我百晓生 小程序回复内容作答:
根据您提供的VBA代码,我理解您的要求是将 "Non Pilot Data" 工作表中与 "Pilot list" 工作表的条件匹配的数据复制到 "Funding Data" 工作表。
要满足您的新要求,您需要更改以下行:
将 Range("A1:BI10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
更改为 Range("A1:BI10000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
通过更改操作类型为 xlFilterCopy
,您可以复制与条件匹配的数据。
然后,您可以尝试更新VBA代码如下:
Sub 高级筛选()
'
' 高级筛选 Macro
'
'
Cells.Select
Selection.Copy
Sheets("Non Pilot Data").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Cells.Select
Application.CutCopyMode = False
' 将过滤操作更改为复制操作
Range("A1:BI10000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Sheets("Pilot list").Rows("1:2"), Unique:=False
ActiveWindow.SmallScroll Down:=-21
Cells.Select
Selection.Copy
Sheets("Funding Data").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
这样修改后,您应该可以在 "Funding Data" 工作表中获得与 "Pilot list" 工作表条件相等的所有数据。
根据你的描述,我理解你的问题是更改了筛选条件,从不等于pilot list数据改为等于pilot list数据后,只能输出一个数据,但你需要输出等于pilot list的所有数据。我认为问题可能出在CriteriaRange参数上。
在原来的代码中,CriteriaRange参数是指定筛选条件的范围。根据你的描述,之前是不等于pilot list数据,那么CriteriaRange应该是两行,第一行是列名,第二行是筛选条件,类似于下面这样:
A B C
1 Name Age Pilot list
2 John 25 <>Yes
在这个例子中,我们筛选不等于"Yes"的数据。
现在你更改了筛选条件,要求等于pilot list数据。那么CriteriaRange应该变成这样:
A B C
1 Name Age Pilot list
2 * =Yes
在这个例子中,我们筛选Pilot list列等于"Yes"的数据。注意,第二行的A、B列不需要填写,因为我们不需要指定其他条件。而第二行的C列填写=Yes表示我们要筛选Pilot list列等于"Yes"的数据。*表示任意值,因为我们不需要指定其他条件。
请将你的CriteriaRange修改为类似上面的例子,然后重新运行代码,应该可以输出所有等于pilot list的数据。