2017-02-02 8 views
1

ユーザから2つの範囲の値を取ってデータセットをフィルタリングしようとしています。私はこれらの2つの値を2つの変数 't1' & 't2'で使用しています。後で、これらの変数を使用してデータセットをフィルタリングしています。しかし、問題は、これらのユーザーのプロンプト値で、私のフィルターが動作していません。フィルタリングは固定値で正常に動作しますが、可変値では機能しません。利便性のためのコードを提供する:もちろんユーザプロンプトVBAでフィルタ

`Sub GetUserInput() 

Dim t1 As Long, t2 As Long 
t1 = InputBox("Type the upper torque limit") 
t2= InputBox("Type the lower torque limit") 
Application.ScreenUpdating = False 

'Below Code segment will find out the Time, Input Torque & Output speed columns from the raw data set regardless of their position 

Sheets(3).Activate 
Range("A1").Select 
Sheets(2).Activate 
Columns("A").Select 
Selection.Copy 
Sheets(3).Activate 
Selection.PasteSpecial 
ActiveCell.Select 
Sheets(2).Activate 

'Find "D2TQSH" in Row 1 
With Sheets(2).Rows(1) 
Set t = .Find("D2TQSH", lookat:=xlPart) 
'If found, copy the column to Sheet 2, Column A 
'If not found, present a message 
If Not t Is Nothing Then 
Columns(t.Column).EntireColumn.Copy _ 
Destination:=Sheets(3).Range("B1") 
Else: MsgBox "D2TQSH Not Found" 
End If 
End With 

'Find "D2SPDFR" in Row 1 
With Sheets(2).Rows(1) 
Set t = .Find("D2SPDFR", lookat:=xlPart) 
'If found, copy the column to Sheet 2, Column A 
'If not found, present a message 
If Not t Is Nothing Then 
Columns(t.Column).EntireColumn.Copy _ 
Destination:=Sheets(3).Range("C1") 
Else: MsgBox "D2SPDFR Not Found" 
End If 
End With 

'Below code segment will filter out data based on the user input values 

Sheets(3).Activate 

With Sheet3 
.AutoFilterMode = False 
.Range("A1:C1").AutoFilter 
.Range("A1:C1").AutoFilter Field:=2, Criteria1:=">=-t1", _ 
Operator:=xlAnd, Criteria2:="<=-t2" 
End With 

'Copy the filtered data. 
Range("A1:C1", ActiveCell.End(xlDown)).SpecialCells(xlCellTypeVisible).Copy 

'Paste filtered dataset to the Output Sheet 
Sheets(4).Range("A1").PasteSpecial 
Sheets(3).AutoFilterMode = False 
` 
` 

答えて

0

が、それは動作しません、あなたは、値「T1」と「T2」のための注意事項をご列をフィルタリングしている - 彼らは、テキスト値文字列です! あなたが

.Range("A1:C1").AutoFilter Field:=2, Criteria1:=">=" & CStr(-t1), _ 
Operator:=xlAnd, Criteria2:="<=" & CStr(-t2) 

これを使用する必要があり、文字列を結合します「> =」あなたのT1およびT2の変数の値は、文字列に変換。

+0

ありがとう、私はそれを昨日修正しました。しかし、以下の構文を使用しました。 .Range( "A1:C1")オートフィルタフィールド:= 2、Criteria1:= "> = - "&t1 _ オペレータ:= xlAnd、Criteria2:= " = - "&t2 – Imtiaz

+0

@Imtiazこれは私のバージョンと同じ文字列になります。私は常に明示的な型変換をしようとします。 – Eugene

関連する問題