Exel:Именование/разыменовывание строк

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Длинное описание (короткое см. ниже)
Задачу условно можно описать через прайслисты.
Дано: "прайслист утренний" на одном листе, вид его
Товар1 5 10 15
Товар2 7 12 20
...
ТоварN x y z

Где Товар N - это наименование (или ID) товара, а x y z - это некие коэффициенты по которым будет высчитываться скидка по сложной формуле (не суть)

На втором листе расположен "прайслист вечерний", точно такой же структуры.

На третий лист подаётся "корзина", т.е. таблица вида Наименование товара, Кол-во.
Требуется для каждого наименования товара выбрать соответствующие коэффициенты с листа "прайслист вечерний" или "прайслист утренний" и расчитать цену по формуле. Принципиальное отличие корзины от прайслиста, заключается в том, что она короче прайслиста, т.е. допустим содержит информацию только по 3, 7 и 11 товарам. При этом порядок следования товаров может быть произвольным (имхо это ограничение рояли не играет, т.е. упорядовачивание товаров задачу не облегчает)

У меня затык происходит уже на этапе позиционирования товара. Если в пределах листа я использую константные лейблы, то я могу получить нужный мне коэффициент:
=Товар3 coeff1 (где Товар3 и coeff1 - это наименования строки и столбца, т.е. лейблы), предварительно поставив галку применять лейблы в формулах. На соседний лист мне уже залезть не получается, схема =Sheet2!Товар3 coeff1 не работает. И совсем не понятно как обращаться к лейблу в виде переменной, т.е. =A2 coeff1 или =CELL("contents";A2) coeff1 не работают тем более :(

Короткое описание
Как по значению ячейки, допустим A2 найти (позиционировать, сослаться на) строку на другом листе, в которой в колонке A записано такое же значение, и получить сумму значений из ячеек в колонках B и С. Повторить для каждой строки листа, результат может быть записан в произвольном месте.


Буду благодарен за любые варианты решения проблемы.

P.S В Ёкселе я полный ньюб, на книгу Ёксель для чайников времени нет, поэтому в каком разделе хэлпа рыть - понятия не имею.
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

частично поборол задачу, воспользовавшись функцией LOOKUP.
Т.е. join двух таблиц я сделал. Теперь вопрос такой, как просуммировать значения?
Пока что воспольовался тупым

Код: Выделить всё

=SUM(
LOOKUP(A1;Sheet1!A2:A20;Sheet1!B2:B20);
LOOKUP(A2;Sheet1!A2:A20;Sheet1!B2:B20);
...
LOOKUP(AN;Sheet1!A2:A20;Sheet1!B2:B20)
)
Правда есть существенная проблема, если в корзине не заполнена ячейка AN, то LOOKUP выдаёт #NA и сумма тоже будет неопределённой. :(
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

можно чутка усложнить формулу
lookup(ЕСЛИ(ЕОШИБКА(AN);0;AN);...)

если в ячейке будет ошибка (любая), то 0, иначе её значение
Изображение
Ответить