过滤精确匹配并从范围中提取标准

时间:2015-10-15 20:32:29

标签: excel-vba vba excel

我正在使用高级过滤器并以部分匹配结束;但是,我需要匹配才能准确。始终从同一工作表上的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。

enter image description here

谢谢

1 个答案:

答案 0 :(得分:0)

我发现唯一可以解决*在任何搜索中都是通配符这一事实的方法是替换它们,过滤数据,然后将它们放回去。

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

enter image description here

然后创建第二张纸,在其上粘贴已排序的数据:

enter image description here

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

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

您可以使用按钮调用此选项,或指定快捷键。它应该工作。

显然,如果在您的搜索区域中使用了|,那么找一些不是外卡的其他角色,而不习惯成为临时占位符。