2014-11-01 38 views
1

所以我需要過濾所有的價格小於或等於單元格的值(6,3)(即50.60)。使用雙變量標準自動過濾器vba

這是我的代碼,但由於某些原因,它不適用於double值。例如,如果我將單元格(6.3)的值從50.60更改爲50,則代碼運行得很好。

任何提示?

Sub cost() 

Dim price As Double 

'Application.DecimalSeparator = "." 
'Application.ThousandsSeparator = "," 
'Application.UseSystemSeparators = True 

Range("B2:C2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "0.00" 

price = Cells(6, 3).Value 

Range("A1:C1").Select 
Selection.AutoFilter 
ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=1, Criteria1:="1" 
ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=3, Criteria1:="<=" & price 
End Sub 

這是我的工作表:

hour consumption price 
1 20,50   0,00 
1 50,10   1,30 
1 70,60   1,50 
1 10,70   30,60 
1 15,90   50,60 
1 30,80   56,20 
1 60,30   60,30 
2 45,20   0,00 
2 80,60   11,30 
2 50,70   20,40 

感謝您的幫助

+0

不能說沒有更多的測試,但VBA解釋您的小數點分隔符是否需要,所以50,60被解釋爲50十進制6?你的國家/語言設置是什麼? – 2014-11-01 20:32:17

+0

我的國家/語言設置是葡萄牙語(PT)。我認爲問題在於VBA沒有正確解釋單元格的值(6,3)。但是,例如,如果我測試msgbox(價格)它給了我正確的價值。 我已經嘗試將Decimal.Separator從「,」更改爲「。」,但它沒有工作:\ – pedropg 2014-11-01 21:22:29

+0

我看你有一個解決方案。 Boa sorte – 2014-11-01 23:19:15

回答

1

有了這條線我的作品。您只需要將price轉換爲string,然後再將它連接到"<="

ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=3, Criteria1:="<=" & Str(price) 
+0

KárolySzommer,謝謝你!!就是這樣,現在它工作得很好:) – pedropg 2014-11-01 21:37:43