Может работать следующая формула:
=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)