Выполните поиск каждой ячейки в диапазоне, используя Excel (для Mac)

Учитывая строку в Excel с переменным числом столбцов, заполненных номерами элементов, я хотел бы сделать поиск в другой таблице, перечисляя стоимость для каждого элемента в заполненных столбцах, и суммировать общую стоимость. Мой Google-фу подвел меня, так как я не могу найти способ выполнить формулу Excel (в данном случае VLOOKUP) для каждой ячейки в диапазоне. В основном, если у меня есть следующие таблицы:

ItemCosts Item | Cost A | 10 B | 20 C | 40

заказы Order | 1 | A 2 | A | B 3 | B | C

Как рассчитать итоговую сумму в следующей таблице по номеру заказа?

итог заказа Order | Total 1 | 10 2 | 30 3 | 60

Мне удалось написать несколько формул, которые генерируют диапазон поиска в форме Orders!$B$2:$C$2, Я думал, что смогу использовать этот диапазон в качестве входных данных для некоторой формулы, чтобы сопоставить элементы в заказе с их стоимостью и суммировать их. Я надеялся, что смогу выполнить VLOOKUP для каждого элемента в диапазоне, и он мог бы вернуть диапазон из ItemCosts таблицу, которую я мог бы затем суммировать, но VLOOKUP принимает только одну ячейку в качестве значения поиска. Я чувствую, что упускаю что-то очевидное. Должен ли я просто сделать это в VBA? В этом ответе упоминается, что VLOOKUP может взять массив, а затем вернуть массив, но я не смог воспроизвести его в Excel 2016 для Mac. Он просто возвращает первое совпадение как одно значение.

РЕДАКТИРОВАТЬ: На основании комментариев кажется, что ненормализованная таблица заказов может быть проблемой. Но даже если это выглядит так, мне не ясно, как выполнить поиск стоимости каждого элемента, чтобы я мог рассчитать общую сумму.

заказы Order | Item 1 | A 2 | A 2 | B 3 | B 3 | C

1 ответ

Решение

Есть два способа получения требуемого результата с помощью "стандартных формул", которые я собираюсь предложить. Я предполагаю, что, возможно, есть функция массива, которая могла бы решить эту проблему без вспомогательных столбцов / листов, но они, как правило, сложны и сложны в обслуживании.

Для нормализованной версии вы можете сделать следующее:

1) Добавьте столбец значений в таблицу заказов:

'Column of Cost in ItemCost Table' = ColumnCost
'Column of Item in ItemCost Table' = ColumnItem

Order | Item | Value
1     | A    |=index(ColumnCost, match(ItemCell, ColumnItem, 0))
2     | A    |...
2     | B    |...
3     | B    |...
3     | C    |...

2) Используйте формулу sumif для суммирования по столбцу Value в таблице заказов, обусловленной номером заказа.

Для ненормализованной версии вместо вспомогательного столбца вы можете использовать вспомогательный лист той же формы и размеров, что и лист заказов.

Использование той же структуры формулы индекса, что и в приведенном выше примере, но вместо использования ItemCell в листе заказа. Это будет выглядеть следующим образом:

заказы

Order |
1     | A
2     | A | B
3     | B | C

Заказы помощника

Order |
1     | 10
2     | 10 | 20
3     | 20 | 40

Для сводной таблицы вы просто суммируете по соответствующему столбцу.

Вы можете найти пример этого здесь: https://ufile.io/rbxf1

Другие вопросы по тегам