Изменить элементы выпадающего списка на основе значения соседней ячейки в vba - PullRequest
0 голосов
/ 10 октября 2018

У меня есть лист Excel, где у меня есть таблица с двумя столбцами и переменным количеством строк.Некоторые из этих строк будут заполнены, а некоторые пустыми.Столбец B содержит некоторые значения, а столбец A имеет раскрывающийся список в каждой ячейке.

Я хочу, чтобы, если в ячейке столбца B было какое-либо значение, в соседней ячейке столбца A в раскрывающемся списке отображались 3 параметра - MODIFY, ADD, DELETE и когда ячейка столбца B пуста, тогда в соседней ячейке столбца A должна отображаться только одна опция в раскрывающемся списке - ADD.Можно ли это сделать с помощью формул VBA или Excel?

Пожалуйста, не путайте это с изменением значений ячеек на основе выпадающего списка.Это наоборот.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Решение без VBA

Это можно сделать с помощью инструмента Проверка данных в Excel:

Сначала необходимо добавить все параметры раскрывающегося списка (ДОБАВИТЬ, ИЗМЕНИТЬ, УДАЛИТЬ) в диапазоне.Это может быть в том же рабочем листе или в любом другом рабочем листе.Для моего примера я поместил их в диапазон F1:F3 того же листа.

Затем выберите весь столбец A и добавьте проверку данных из меню ленты ›Данные› Инструменты данных ›Проверка данных:
enter image description here

На вкладке Настройки , под Разрешить , выберите Список и используйте следующую формулу на Источник :

=IF(B1<>"",$F$1:$F$3,$F$1)

Обратите внимание, что первый диапазон $F$1:$F$3 указывает на ДОБАВИТЬ, ИЗМЕНИТЬ, УДАЛИТЬ, а второй диапазон $F$1 указывает только на ДОБАВЛЕНИЕ!

0 голосов
/ 10 октября 2018

Назовите свой список, как показано ниже,

enter image description here

После этого создайте проверку данных с помощью этой формулы

= НЕПОСРЕДСТВЕННО(ЕСЛИ ($ C2 <> "", "All", "One"))

enter image description here

Вы получите раскрывающийся списоксогласно вашему требованию

enter image description here

0 голосов
/ 10 октября 2018

Решение VBA

Следующие элементы достигнут того, что вы ожидаете, они будут циклически проходить по вашему столбцу B и, если он пуст, добавят раскрывающийся список как Проверка данных в столбце A сзначение «ДОБАВИТЬ», если оно не пустое, добавятся списки «ИЗМЕНИТЬ», «ДОБАВИТЬ», «УДАЛИТЬ»:

Sub foo()
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
'declare and set the worksheet you are using, amend as required
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
'get the last row with data on Column B

For i = 2 To LastRow 'loop from Row 2 to Last
    If ws.Cells(i, "B").Value <> "" Then
        With ws.Cells(i, "A").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="MODIFY,ADD,DELETE"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With
    Else
        With ws.Cells(i, "A").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="ADD"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With
    End If
Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...