Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 筛选精确匹配并从范围中提取条件_Excel_Vba - Fatal编程技术网

Excel 筛选精确匹配并从范围中提取条件

Excel 筛选精确匹配并从范围中提取条件,excel,vba,Excel,Vba,我使用了一个高级过滤器,结果是部分匹配;但是,我需要精确匹配。此筛选器的条件始终从同一工作表上的B1:B3中提取。请帮我把过滤器弄准确 下面是我正在使用的过滤器的代码: FinalRow = Cells(Rows.Count, 1).End(xlUp).Row Sheets("Final").Range("B5:B" & FinalRow).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

我使用了一个高级过滤器,结果是部分匹配;但是,我需要精确匹配。此筛选器的条件始终从同一工作表上的
B1:B3
中提取。请帮我把过滤器弄准确

下面是我正在使用的过滤器的代码:

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

             Sheets("Final").Range("B5:B" & FinalRow).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
             Range("B1:B3"), Unique:=False
             Range("B1").Select
结果如下:

标准仅包括DPB1*01:01:01,但DPB1*04:01:01:01在标准下方显示的过滤数据中也可见


谢谢你

我发现,在任何搜索中,
*
都是一个通配符,唯一的办法就是替换它们,过滤数据,然后放回原处

把你的数据放在一张纸上,我把我的称为“数据”,从“A1”开始:

然后创建第二张工作表,其中将粘贴排序后的数据:

然后在模块中添加以下代码:

Sub user5632387()
Application.EnableEvents = False
Dim dws As Worksheet
Dim sws As Worksheet
Dim finalRow As Long
Dim dataRng As Range
Dim critRng As Range
Dim CpyToRng As Range

Set dws = Worksheets("Data") ' Change to sheet with data
Set sws = Worksheets("Sort") ' Change to sheet on which to sort

With dws
    finalRow = .Cells(Rows.count, 1).End(xlUp).Row
    Set dataRng = .Range(.Cells(1, 1), .Cells(finalRow, 1).End(xlToRight))
End With

With sws
    Set critRng = .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight).Offset(2))
    Set CpyToRng = .Range(.Cells(5, 1), .Cells(5, 1).End(xlToRight))
End With

'change out all "*" for "|"
dataRng.Replace "~*", "|"
critRng.Replace "~*", "|"

'Filter
dataRng.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=critRng, CopyToRange:=CpyToRng, _
        Unique:=False



'Replace "*"
critRng.Replace "|", Chr(42)
dataRng.Replace "|", Chr(42)
Range(CpyToRng, CpyToRng.End(xlDown)).Replace "|", Chr(42)


Application.EnableEvents = True
End Sub
您可以通过按钮调用此功能,或指定快捷键。它应该会起作用


显然,如果搜索区域中使用了
|
,则可以查找其他非通配符且不曾作为临时占位符的字符。

尝试在值前面使用
=
设置条件:
'=DPB1*01:01:01
。问题是精彩的
*
。它是一个通配符,将查找任何内容,以便您的
*04:
计数。抱歉,这似乎没有帮助。我得到了同样的结果。@user3781528您如何调用放置此代码的子节点?我刚刚再次测试了它,它成功了。@user3781528我做了一些编辑。我发现了一些错误。请试用。为什么要将筛选后的数据复制到新工作表?我还没有尝试您的更新代码,但以前的代码在个人工作簿中有效,但当它移动到我的项目为DPB1的工作簿中时*04:01:01:01未被过滤掉。这很奇怪。我也尝试过启用事件,但没有帮助。如果可能的话,我想避免使用多张纸来完成这项工作?