Фильтрация списка проверки по столбцам в именованном диапазоне - PullRequest
1 голос
/ 23 мая 2011

Я ищу способ фильтрации проверки списка в Excel на основе именованного диапазона из нескольких столбцов.

У меня есть список выпусков продуктов на одном листе, который содержится в именованном диапазоне со столбцами: Имя, Тип, Состояние. На другом листе я хочу, чтобы пользователь мог выбирать из списка проверки, содержащего только «Имя». Вопрос 3741060 здесь описывает, как сделать список проверки только содержащим столбец «Имя». Однако мне также нужно отфильтровать, чтобы пользователь не мог выбрать выпуск со статусом «Завершено». [В столбце состояния разрешены только «Запланировано», «Выделено» или «Завершено».]

В идеале я также хотел бы динамически показывать только «Запланированные» ИЛИ «Распределенные» выпуски на основе еще одной проверки - но я думаю, что если я смогу отфильтровать список вообще, я смогу сделать все остальное. Кстати, я вынужден использовать Excel 2003 для этого, хотя я не верю, что это будет основным фактором.

1 Ответ

1 голос
/ 23 мая 2011

Я использую

  • дополнительный диапазон значений (для списка значений) в скрытом листе, который я заполняю текущими критериями, которые пользователь может выбрать (в моем случае это варьируется от строки к строкекогда он заполняет лист)
  • все ячейки основного листа проверяются на соответствие этому диапазону LOV
  • триггер Selection_Change () загружает LOV после каждого перемещения курсора из исходного возможного диапазонаchoices

Так я заново генерирую свой LOV (по сути, пользователь уже выбрал код страны в другой ячейке, переданной здесь в строке CtyCd, и теперь лист готов предложить выбор извозможные варианты чего-то, называемого GINI, только для этой страны ... так что, возможно, похоже на ваш запрос)

Sub LoadL2LOV(CtyCd As String, LOVL2 As Range)
'
' CtyCd is a selection criterium for the original list in range GINI
' LOVL2 is the target range containing the current list of values
' all cells in sheet have a validation against range LOV defined
'
Dim GINI As Range, Idx As Long, Jdx As Long, LName As Name, Adr As String

    ' clear current PoP_L2
    Set LName = ActiveWorkbook.Names(LOVL2.Name.Name)
    Set GINI = Worksheets("GINI Availability").Range("GINI")
    LOVL2.ClearContents

    ' set new LOV for PoP_L2
    If CtyCd <> "" Then
        Idx = 2
        Jdx = 1

        ' find 1st occurence of CtyCd in GINI
        Do While GINI(Idx, 4) <> CtyCd And GINI(Idx, 4) <> ""
            Idx = Idx + 1
        Loop

        ' GINI is sorted, just read until the end of selected CtyCd
        Do While GINI(Idx, 4) = CtyCd
            LOVL2(Jdx, 1) = GINI(Idx, 1) & "-" & GINI(Idx, 2) & "-" & GINI(Idx, 3)
            Idx = Idx + 1
            Jdx = Jdx + 1
        Loop
    End If

    ' redefine LOV name to contain all current valid choices
    LOVL2.CurrentRegion.Name = LOVL2.Name.Name
End Sub

В вашем случае, поскольку данные кажутся более или менее статичными, вы можете скопировать все действительные вариантыот [Prod_Release] до LOV в Sheet_Activate или любом соответствующем триггере активации.

Надеюсь, это поможет .... удачи MikeD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...