查找所有高级筛选条件的组合

我search了很多,发现了很多关于排列的信息,但是我想不出一个适应它们的好方法。 令人沮丧的是,我不认为答案是那么难,但我似乎无法自己达成。

我试图将包含select标准的一系列单元格转换为高级filter可以读取的范围。 select标准的范围如下所示:

原始选择标准

问题是,高级filter将每行评估为一个单独的filter集。 逻辑看起来像这样:

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

这是高级filter应该工作的方式,但是我需要它像自动filter一样工作,在那里我会遍历每个字段并检查每个filter标准。 逻辑应该是这样的:

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

阅读文档和多个论坛后,唯一能做到这一点的方法就是在单独的行上生成每个可能的select标准组合。 新的select标准范围应该如下所示:

工作选择标准

我已经通过手动设置select标准范围进行了testing,它工作正常,但我无法弄清楚代码自动化。 这是我迄今为止所做的 – 它开始可以,但很快就会开始重复和缺less某些排列:

  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 

真的很感谢一些帮助或者产生正确的排列或使高级filter工作一些其他方式。

这对我有效。 我把工作表放在“显示公式”模式(Ctrl +〜),所以你可以看到公式…过滤列表是在A7:B14,标准范围是A3:B4。

在这里输入图像说明

应用filter后,我只得到一行(“B”,“val2”)。