2017-07-31 16 views
1

ユーザーフォームのチェックボックスから複数の項目を選択する方法が必要です。いったん声明が真実になると、論理は継続しないという事実に論理的な誤りがあると私は信じている。自動フィルターとユーザーフォームを使用した複数項目の選択

If flt_type_cb1.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=DOM" 
ElseIf flt_type_cb2.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=AK" 
ElseIf flt_type_cb3.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=HI", Operator:=xlOr, Criteria2:="HI-LH" 
ElseIf flt_type_cb4.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=INTL-ASIA", Operator:=xlOr, Criteria2:="INTL-ASIA-PJ" 
ElseIf flt_type_cb5.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=PS" 
ElseIf flt_type_cb6.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=GU", Operator:=xlOr, Criteria2:="GUMHNL" 
ElseIf flt_type_cb7.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=LATBUS" 
ElseIf flt_type_cb8.Value = True Then 
    WholeSheetRange.AutoFilter Field:=7, Criteria1:="=INTL", Operator:=xlOr, Criteria2:="INTL-PJ" 
End If 

Iは、例えばDOMとPSの両方を選択できるようにしたいと思います。ここでは

は、私が現在持っているコードです。

+1

条件が満たされたときに、 'elseif'を使用することにより、コードが残りの部分をスキップします。このような場合は、別々の 'if'文を使用することを検討してください。 – Tehscript

+1

[この回答](https://stackoverflow.com/questions/38404176/using-string-array-as-criteria-in-vba-autofilter)の最後のオプションのようにロードするフィルタ値の文字列を作成できます#38404521)。値の文字列を構築するには、チェックボックス(コントロールがあると仮定)とチェックボックスの番号に基づいてテスト条件をループすることができます。 –

+0

私はループロジックに関する問題を抱えているので、私は別々のif文の方に傾いています。私がif文のパスを辿ると、変種として新しい変数を作成する必要があります。本当のケースごとに文字列を変数に追加してから、xlFilterValuesを実行します。 編集:配列をあらかじめ定義しておき、見つからない場合は各値を何も設定しない方が良いでしょうか。 –

答えて

0

おそらく最も効率的ではないにしても、ifステートメントのパスに従いました。あるよう

私のコードは次のとおりです。

Dim flight_type_array As Variant 

flight_type_array = Array("DOM", "AK", "HI", "HI-LH", "INTL-ASIA", "INTL-ASIA-PJ", "PS", "GU", "GUMHNL", "LATBUS", "INTL", "INTL-PJ") 

If flt_type_cb1.Value = False Then 
    flight_type_array(0) = "" 
End If 
If flt_type_cb2.Value = False Then 
    flight_type_array(1) = "" 
End If 
If flt_type_cb3.Value = False Then 
    flight_type_array(2) = "" 
    flight_type_array(3) = "" 
End If 
If flt_type_cb4.Value = False Then 
    flight_type_array(4) = "" 
    flight_type_array(5) = "" 
End If 
If flt_type_cb5.Value = False Then 
    flight_type_array(6) = "" 
End If 
If flt_type_cb6.Value = False Then 
    flight_type_array(7) = "" 
    flight_type_array(8) = "" 
End If 
If flt_type_cb7.Value = False Then 
    flight_type_array(9) = "" 
End If 
If flt_type_cb8.Value = False Then 
    flight_type_array(10) = "" 
    flight_type_array(11) = "" 
End If 

WholeSheetRange.AutoFilter Field:=7, Criteria1:=flight_type_array, Operator:=xlFilterValues 
関連する問題