1

ポップアップして、並べ替えたい変数を選択するように求める 6 つのユーザーフォームがあります。

  1. ClientFilter
  2. コスト センター フィルター
  3. ユーティリティフィルター
  4. TypeOfWorkfilter
  5. AnalystFilter
  6. ProjMgrFilter

それぞれの内部で、各変数に対して if ステートメントを使用します。

Sub UpdateCF()
    Integer_CF = -1

    If AU_CF.Value = True Then
        Add_CF String_CF, "AU"
        Range("$B$6:$AU$68").AutoFilter  _
              Field:=2, Criteria1:=String_CF,   _
              Operator:=xlFilterValues
    End If

    If AULaw_CF.Value = True Then
        Add_CF String_CF, "AULAW"
        Range("$B$6:$AU$68").AutoFilter  _
              Field:=2, Criteria1:=String_CF,   _
              Operator:=xlFilterValues
    End If
    ... 

End Sub

Sub Add_CF(String_CF() As String, NewValue As String)
    Integer_CF = Integer_CF + 1
    ReDim Preserve String_CF(Integer_CF)
    String_CF(Integer_CF) = NewValue
End Sub

複数のフィールドでソートできるようにしたいことを除いて、これはうまく機能します。たとえば、クライアント フィルターを使用して変数を選択し、コスト センター ユーザーフォームを使用して、両方の並べ替えを同時に有効にしたいと考えています。

4

1 に答える 1

1

問題があると思われる理由がわかりません。上記と同じアプローチを使用できますが、フィルターを別のフィールドに追加できます。それは両方でフィルタリングされます。

例(明らかに、状況に適応する必要があります):

Sub blah()

    Dim currentFilters_FirstField
    Dim currentFilters_SecondField
    Dim field1_Option1, field1_Option2, field2_Option1, field2_Option2 'just an example
    Dim rng As Range

    field1_Option1 = True
    field1_Option2 = True
    field2_Option1 = True
    field2_Option2 = False

    'prepare your filters from the menu etc
    If field1_Option1 Then appendFilterValue currentFilters_FirstField, "AU"
    If field1_Option2 Then appendFilterValue currentFilters_FirstField, "AULAW"
    If field2_Option1 Then appendFilterValue currentFilters_SecondField, "Whatever1"
    If field2_Option2 Then appendFilterValue currentFilters_SecondField, "Whatever2"

    Set rng = Range("A1:D100") ' range for the filtering etc
    rng.AutoFilter 1, currentFilters_FirstField, xlFilterValues
    rng.AutoFilter 2, currentFilters_SecondField, xlFilterValues 'note the different field this is applying to

End Sub

Sub appendFilterValue(ByRef currentFilters, newFilter)

    If IsArray(currentFilters) Then
        ReDim Preserve currentFilters(0 To UBound(currentFilters) + 1)
    Else
        ReDim currentFilters(0 To 0)
    End If

    currentFilters(UBound(currentFilters)) = newFilter

End Sub
于 2013-08-03T13:49:37.770 に答える