2015-10-15 12 views
2

我正在使用高級過濾器並以部分匹配結束;不過,我需要確切的匹配。此篩選器的標準始終從同一工作表上的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

謝謝

+0

嘗試在值的前面用'= ='設置您的標準:''= DPB1 * 01:01:01'。問題是美妙的'*'。它是一個通配符,並且會查找任何內容,因此您的'* 04:'很重要。 –

回答

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 

你可以用一個按鈕來調用它,或者分配一個快捷鍵。它應該工作。

很顯然,如果在您的搜索區域中使用了|,那麼找到一些其他字符不是通配符,也不是用作臨時佔位符。

+0

對不起,這似乎沒有幫助。我得到了同樣的結果。 – user3781528

+0

@ user3781528你如何調用這個代碼的子部分?我只是再次測試它,它工作。 –

+0

@ user3781528我做了一些編輯。我發現了一些錯誤。請嘗試一下。 –