Есть ли способ узнать, существует ли заданное значение в строке, определенной с помощью VLOOKUP, и, если да, вернуть значение в другой ячейке в этой строке? - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть набор данных Excel, который суммирует надбавки за доставку по номеру отслеживания. У меня есть номер отслеживания в столбце A в качестве индекса, но данные представлены так, что справа от номера отслеживания в столбце A у меня есть пары столбцов, которые определяют тип заряда и $ Charge справа от отслеживания. Заголовки столбцов являются общими для Типа надбавки и Суммы надбавки, поэтому столбцы не являются фиксированными. Таким образом, столбец B (первый тип доплаты для любого заданного номера отслеживания) может быть либо пустым, либо содержать какое-либо подмножество применимых надбавок за отслеживание, при этом сумма сбора, связанная с этим типом надбавки, представлена ​​в столбце C (в противном случае она составляет 0 долларов США). ). Я хочу воссоздать набор данных с моими номерами отслеживания в столбце A, все возможные типы доплат фиксированы в качестве заголовков столбцов (начиная с столбца B), а тело таблицы, содержащее только суммы сборов, в $, для данная комбинация номера для отслеживания и типа доплаты. Смотрите текущий формат и желаемый формат следующим образом.

Ток:

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

Желаемая:

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

Как мне наиболее эффективно кодировать это в Excel? Теперь, что если я скажу вам, что данный номер отслеживания может появляться более одного раза в столбце A (то есть корректировки предыдущих платежей). Как это меняет формулу?

СПАСИБО!

1 Ответ

0 голосов
/ 27 апреля 2019

Может работать следующая формула:

=IFERROR(INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),MATCH(<columnHeader>,INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),2)&":"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),<max#ofSurcharges*2+1>)),0)+2)),0)

По сути, он находит строку трекинга # на первом листе и создает массив, в котором нужно искать имя надбавки, и если он находит надбавку, то еговернет значение соседней ячейки, которое является ассоциированным значением.

Обратите внимание, что эта формула в некоторой степени зависит от структуры необработанных данных: номера отслеживания должны быть в столбце A, а начисления должны начинатьсяв столбце B.

Также в списке будет найден только первый экземпляр номера отслеживания, поэтому я предлагаю добавить некоторую форму метки времени для сортировки необработанных данных, если вам нужно использовать последнюю запись.

Редактировать: решение, использующее VLOOKUP, может быть более эффективным, не уверен

Редактировать2: Проблема с VLOOKUP заключается в том, что необработанные данные не являются правильной таблицей, такой как отредактированные данные.Действительно, лучшим решением было бы ввести 0 значений в первую очередь, а не после.

В любом случае, это решение довольно похоже на вышеприведенное, но использует VLOOKUP для извлечения данных в конце.Если вы имеете дело с большими наборами данных, вы можете проверить, какой метод более эффективен.

=IFERROR(VLOOKUP(<Tracking#>,<referenceToRawData>,MATCH(<columnHeader>,INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),2)&":"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),<max#ofSurcharges*2+1>)),0)+2,FALSE),0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...