1

私は広範囲に検索し、順列に関する多くの情報を見つけましたが、それらを適応させる良い方法を考えることはできません。答えはそれほど難しいとは思わないのでイライラしますが、自分でそこにたどり着くことができないようです。

選択基準を含むセルの範囲を、高度なフィルターが読み取れる範囲に変換しようとしています。選択基準の範囲は次のようになります。

生の選択基準

問題は、AdvancedFilterが各行を個別のフィルターセットとして評価していることです。ロジックは次のようになります。

[awake AND bob AND cat AND earth AND yes] OR [sleeping AND sally AND dog AND earth AND yes] OR ... OR [martha].  

これはAdvancedFilterが機能するはずの方法ですが、各フィールドを調べて各フィルター基準をチェックするオートフィルターのように機能する必要があります。ロジックは次のようになります。

[awake OR sleeping] AND [bob OR sally OR george OR martha] AND [cat OR dog OR bird] AND [earth] AND [alive]

ドキュメントと複数のフォーラムを読んだ後、私が見つけることができるこれを行う唯一の方法は、可能な選択基準のすべての組み合わせを別々の行に生成することです。選択基準の新しい範囲は次のようになります。

作業選択基準

選択基準の範囲を手動で設定してこれをテストしましたが、正しく機能しますが、自動化するためのコードを理解できません。これが私がこれまでに行ったことです-それは最初は大丈夫ですが、すぐに繰り返し始め、特定の順列を失います:

   If UBound(numRows) > 1 Then

    With Worksheets("fltr")
        .Range(.Cells(4, 1), .Cells(4, UBound(numRows))).Copy Destination:=Worksheets("afltr").Range("A1")
    End With

    'Determine number of rows needed for Advanced filter
    numPermute = numRows(1)
    For dstCol = 2 To UBound(numRows)
        numPermute = numPermute * numRows(dstCol)
    Next dstCol

    'Copy all permutations to advanced filter
    For dstCol = 1 To UBound(numRows)
        If thisRow > numRows(dstCol) Then
        thisRow = 2
        For thisGrp = 1 To numRows(dstCol)
            andSpltPos = 1
            For numRepeat = 1 To numPermute / numRows(dstCol)
                sbstFltrItms = Worksheets("fltr").Cells(4 + thisGrp, dstCol).Value 'MOD Problem?
                Worksheets("afltr").Cells(thisRow, dstCol).Value = sbstFltrItms
                thisRow = thisRow + 1
            Next numRepeat
        Next thisGrp
    Next dstCol

End If

正しい順列を生成するか、高度なフィルターを他の方法で機能させるための助けを本当にいただければ幸いです。

4

1 に答える 1

1

これは私にとってはうまくいきました。シートを「数式を表示」モード (Ctrl+~) にして、数式を表示できるようにします... フィルターするリストは A7:B14 にあり、基準範囲は A3:B4 です。

ここに画像の説明を入力

フィルターを適用した後、1 行 ("B"、"val2") を取得するだけです。

于 2012-08-18T01:03:20.470 に答える