У меня была та же проблема, когда я хотел иметь определяемую пользователем строку для фильтрации, в которой люди могли бы указать столбец и значение фильтра для нескольких столбцов одновременно.
В этом примере пользователи строкиможно определить выглядит так:
"A, foo; B, бар; AD, до неузнаваемости"Или "ColumnLetterOrIndex запятая FilterValue Точка с запятой" Повторите.и т. д. для любого числа столбцов и значений.
Код:
Public Function createFilter(filterstring as string) as Variant
Dim tempFilter As Variant
Dim realFilter As Variant
tempfilter = Split(filterstring, ";")
For i = LBound(tempfilter) To UBound(tempfilter)
ReDim Preserve realFilter(i)
realFilter(i) = Split(tempfilter(i), ",", 2)
'The 2 is needed if the filtervalue contains a comma on itself. Otherwise, it can be omitted.
Next i
createFilter = realFilter
End Function
Приведенная выше функция создаст многомерный массив из строки, значения которой могут использоваться с автофильтром Excels изстрока.Код использования:
Dim userFilter as Variant
userFilter = createFilter(userDefinedFilterString)
For i = LBound(userFilter) To UBound(userFilter)
'Note that here you'll have to convert the Columnletter to something numeral, unless the users define their column like 1, 2, 3 instead of A, B, C.
thefiltercolumn = Measure.filter(i)(0)
.AutoFilter thefiltercolumn, Measure.filter(i)(1)
Next i
Когда значения фильтра равны «Не равно» или «содержит», вы можете использовать встроенный в Excel способ, например,
A,<>foo;B,*bar*;AD,>=5
Плохая часть: несколько критериев в 1 столбце недоступны, как в предыдущем примере.