#excel #vba
#excel #vba
Вопрос:
Я пытаюсь создать раскрывающийся список проверки данных, содержащий доступные интерфейсы маршрутизатора (столбец E) на основе модели маршрутизатора 1 (столбец B) и модели маршрутизатора 2 (столбец C).
Я работаю со списком интерфейсов (столбец D) для router1, используя:
=INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT("B" amp; ROW()) amp; "]")
Здесь я сталкиваюсь с проблемой. Для Col E мне нужно сделать то же самое косвенное для списка таблиц, но, если COL C текущих строк = «не используется», тогда используется значение COL B, иначе используется значение COL C.
Сначала я попробовал это, но это не сработало:
=INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT(IF(INDIRECT("C" amp; ROW()) = "not used", "B", "C") * ROW()) amp; "]")
Затем я попробовал, но это не сработало:
=If(INDIRECT("C" amp; ROW()) = "not used", INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT("B" amp; ROW()) amp; "]"), INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT("C" amp; ROW()) amp; "]"))
Но это то, что меня убивает. Потому что это работает… но мне нужны статические столбцы, но динамические строки на основе текущей строки:
=If($C$6 = "not used", INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT("B" amp; ROW()) amp; "]"), INDIRECT("TBL_Device_Interfaces[" amp; INDIRECT("C" amp; ROW()) amp; "]"))
ПРИМЕЧАНИЕ: я набрал это вручную с автономного компьютера. Извините, если есть какие-либо ошибки типа os (например, неправильное написание косвенного). Их не будет в основном коде. У меня есть, если все работает в сегментах, но я не могу заставить его работать при проверке данных.
Я также уверен, что есть другой способ создать выпадающий список. Мне просто нужно иметь возможность ссылаться на таблицы значений, используя index / match и косвенные ссылки.
Ответ №1:
Вы смешиваете разные стили ссылок на ячейки. Если вы подумаете о том, как ваша формула будет выполнять свою фразу «Go проверьте TBL_Device_Interfaces[B3]». Вы можете увидеть, как создавать ссылки на структурированные таблицы здесь .Вам нужно либо придерживаться ссылки на структурированную таблицу, либо вернуться к стандартной ссылке.
Попробуйте свою формулу как:
=IF($C$6 = "not used", INDIRECT( INDIRECT("B" amp; ROW()) ), INDIRECT(INDIRECT("C" amp; ROW()) ))
или, если вы хотите придерживаться структурированной ссылки, попробуйте:
=IF(TBL_Device_Interfaces[@Column3] = "not used", TBL_Device_Interfaces[@Column2], TBL_Device_Interfaces[@Column1])
Возможно, у вас неправильные столбцы, но это должно сработать.
Комментарии:
1. Столбец B = маршрутизатор 1, столбец C = маршрутизатор 2, столбец D = интерфейс 1, столбец E = интерфейс 2. Всегда есть два интерфейса. Мне нужен список значений данных, чтобы отражать интерфейсы из таблицы на основе выбора типа модели в COL C… если нет второго маршрутизатора, в котором он будет извлекать список интерфейсов типа модели в COL B.
2. Например: интерфейсы Cisco = Gi, Te. Juniper interface = ge, xe. COL B ROW()= Cisco, COL C ROW()= Juniper. Я хочу, чтобы выпадающий список столбцов был ge или xe. Но если COL E = Cisco, я хочу, чтобы это был Gi или Te. Как я уже сказал, это пример, список if более обширный и содержит много типов моделей. Также причина, по которой я не определяю точную ячейку и использую косвенное в функции if, заключается в том, что это служба, которая создается для каждой строки. Поэтому мне нужно использовать один и тот же выпадающий список для 100 строк, и я не хочу продолжать редактировать отдельные строки. Мне нужно динамическое решение, основанное на выборе текущей строки
3. Также стоит упомянуть, что данные в COL B и C являются значениями заголовка таблицы для интерфейсов. Именно поэтому я использую ссылки на таблицы.
4. Можете ли вы загрузить упрощенный пример?
5. Понял, извините. Вы не можете использовать Row() в списке проверки данных.