Excel - VLoolup с Match - это оптимальное решение?
337
David
Я пытаюсь избежать избыточности вычисления одного и того же индекса столько раз, сколько существует записей, поэтому я должен предварительно рассчитать индекс с помощью MATCH в скрытой ячейке над моей таблицей?
Стоит также отметить, что хотя мои столы не будут массивными, они также не будут маленькими. Вероятно, будет около 6 таблиц в каждой с одним или двумя VLOOKUPS (полный столбец) с общим количеством записей в сотнях.
Точнее, я собираюсь создать набор таблиц в Excel и буду эмулировать полезности правильной реляционной базы данных, используя функцию VLOOKUP для получения значения связанной таблицы, но я буду использовать MATCH функция, чтобы получить индекс столбца, который я хочу, по его заголовку. Ниже приводится фактическая формула, которую я буду использовать:
= ВПР ([@ ForeignKey], RelatedTable, MATCH (RelatedTable [[# Заголовки], [ItemName]], RelatedTable [#headers], 0), значение FALSE)
Не уверен, что вы пытаетесь достичь. Почему бы вам не сделать индекс / матч против vlookup / матч?
user218076 5 лет назад
0
Потому что я не знаю, является ли плохой практикой иметь индекс, лежащий вне самой таблицы, по сравнению с тем, что таблица полностью автономна.
David 5 лет назад
0
Не могли бы вы опубликовать пример данных вместе с выходом, поможет нам решить эту проблему. Кажется, вы пытаетесь Vlookup (,,, Match (,,,,)) написать?
Rajesh S 5 лет назад
0
@Rajesh S Извините, мне потребовалось некоторое время, чтобы ответить. Теперь есть пример с двумя форматами, о которых я говорю. Кроме того, я спрашиваю с точки зрения пользователя Excel без профессионального или формального образования. Я в основном хочу знать, является ли последний пример формально неприемлемым.
David 5 лет назад
0
Я обычно использую ячейку в скрытой строке, чтобы сохранить номер столбца, который будет использоваться с VLOOKUP. Я должен признать, я не знаю, если это необходимо. Возможно, что если Excel видит, что одна и та же функция MATCH выполняется много раз, он вызывает функцию один раз и сохраняет результат, который будет использоваться для всех остальных вызовов.
Blackwood 5 лет назад
0
Да, можно получить имя элемента из таблицы продуктов, сопоставив идентификатор между таблицей продуктов и транзакций.
Rajesh S 5 лет назад
0
Вы можете записать эту формулу в ячейку D2 таблицы транзакций ,, - = Iferror (Vlookup (B2, A2: C4,3, false), "") и заполнить ее. нет необходимости назначать имя таблицы и столбца, как показано выше. Если вы чувствуете, просто назовите диапазон, тоже подойдет. Если таблица Product находится на другом Листе, тогда добавьте префикс имени Листа к A2: C4.
Rajesh S 5 лет назад
0
1 ответ на вопрос
1
user218076
Я бы написал в D2. =index(Table_Products'$B:$B,(match($B2,Table_Products'$A:$A,0)) Вы также можете выполнить двухстороннее сопоставление, если хотите изменить столбец для возврата вместо жесткого кодирования столбца имени элемента (столбец B). Я могу изменить ответ, если вам это нужно.
Я использую это ежедневно на листах с тысячами просмотров на многослойных таблицах и не замечаю проблем с производительностью. В общем случае Index / Match лучше, чем Vlookup, поскольку vlookup необходимо обрабатывать весь диапазон.