MS Excel vlookup возвращает только один экземпляр

1

У меня есть лист как

       A | Б | C |
1 клиент 1 | Продукт 1 | 150 долларов |
1 клиент 1 | Продукт 1 | ---- |
2 Клиент 1 | Продукт 2 | 50 долларов США |
3 Клиент 2 | Продукт 1 | 150 долларов |

Идея состоит в том, что столбец C: C извлекает цену из vlookup, но я не хочу добавлять цену, если тот же продукт уже использовался для этого клиента , у меня есть эта формула, которая работает почти, но она исключает для того же клиента даже с другим продуктом. Формула для столбца C.

=IF(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="","",IF(COUNTIF($A$3:A3,B3)>1,"",VLOOKUP(C3,data_validation!A:B,2)))

PS data_validation - это просто другой лист, где я создаю все свои проверки и использую их для поиска цены на основе номера продукта.

PH
источник
Вопрос в названии не соответствует тому, что вы описываете: говоря, что vlookup предназначен только для возврата одного экземпляра.
Солнечный Майк
Мне не очень понятно ваше требование, если на листе data_validation 2 продукты и клиенты совпадают, но значение $ отличается. Какое значение вам нужно? Вы пробуете функцию SUMPRODUCT?
Ли
@Lee data_validation не имеет информации о клиенте, а только о товарах и ценах, с которых данные опускаются.
PH

Ответы:

1

Вот решение, включающее предложение Ли использовать функцию SUMPRODUCT (). Заполните эту формулу вниз от C3:

=IF(SUMPRODUCT((A$3:A3=A3)*(B$3:B3=B3))>1,"",VLOOKUP(B3,E$4:F$5,2))

Как это работает: выражения A $ 3: A3 = A3 и B $ 3: B3 = B3 возвращают массивы значений True / False, которые увеличиваются по мере заполнения формулы. Например, в C6 A $ 3: A6 = A6 равно {False; False; False; True}, поскольку последняя позиция является единственной ячейкой в ​​диапазоне, равном A6. Аналогично, B $ 3: B6 = B6 равно {False; False; True; True}, поскольку последние две позиции соответствуют B6.

Теперь умножение этих двух массивов преобразует значения True / False в 1 и 0 и выполняет эквивалент логического AND (). Результатом умножения (в C6) является массив {0; 0; 0; 1}. SUMPRODUCT () складывает элементы этого массива, возвращая 1.

Теперь функция IF () возвращает результат VLOOKUP, потому что результат SUMPRODUCT () не> 1.

Если посмотреть на формулу в C4, то A $ 3: A4 = A4 равно {True; True}, а B $ 3: B4 = B4 также равно {True; True}, поэтому умножение дает {1; 1}, а SUMPRODUCT () возвращает 2 и IF () возвращает пробел.

РЕДАКТИРОВАТЬ, чтобы показать результаты:

введите описание изображения здесь

Я поместил таблицу поиска на тот же лист, что и данные. Вы можете отредактировать уравнение, чтобы обратиться к вашей справочной таблице.

Примечание. Если этот ответ окажется полезным, нажмите на серую галочку в левом верхнем углу, чтобы принять ответ и удалить его из очереди без ответа. Благодарю.

Bandersnatch
источник
Спасибо @Bandersnatch, но это добавляется, даже если выбран один и тот же клиент с другим продуктом
PH
Добавляет что? Это уравнение делает именно то, что вы просили в своем вопросе. Возвращает цену продукта ТОЛЬКО для первого экземпляра комбинации клиент / продукт. Смотрите скриншот в отредактированном ответе. Если вы хотите получить другой результат, чем этот, пожалуйста, объясните ваши требования более четко.
Bandersnatch
Извините, вы правы, это работает, но только потому, что я использую проверку данных в списке продуктов, иначе, когда я наберу вручную «Подделка продукта», это добавит значение последней цены продукта. но в моем случае это работает отлично. Спасибо
PH
Пожалуйста. Рад, что это сработало для вас.
Bandersnatch
на самом деле у меня все еще есть небольшая проблема, когда я автоматически заполняю столбец C, первая пустая строка возвращает # N / A, и это влияет на функцию SUM, основанную на этом столбце
PH