Проблема с условным индексом / совпадением

#excel

#excel

Вопрос:

таблица 1

таблица 2

Здравствуйте, я пытаюсь решить проблему, из-за которой у меня поджарился мозг. У меня есть две таблицы, Table1 и Table2. В таблице 1 есть список артикулов, а также отдел / класс / штраф, которые по сути представляют собой разбивку по группам продуктов. Здесь есть иерархия. У каждого отдела есть подкласс, и каждый класс можно разбить на более мелкие тонкие линии. Отдел> класс> Тонкая грань. Таблица 2 содержит информацию о разметке. Я пытаюсь сопоставить правильную разметку в таблице 2 с соответствующим DCF в таблице 1. Вот кикер: не все наценки соответствуют точному DCF, некоторые наценки применяются только к определенному отделу / классу или даже только к отделу.

Вот моя логика:

  1. ЕСЛИ DCF(Dept / class / fine) из table1 соответствует table2, найдите запись разметки cus1 с соответствующим DCF и верните ее в table1.
  2. Если значение Fine отсутствует, верните значение для сопоставления Dept TRUE / Class True / Fine NULL .
  3. Если отсутствуют как Class, так и Fine, верните значение только для отдела TRUE / Class NULL / Fine NULL .

Я могу заставить это уравнение работать каждый раз, если все 3 DCF совпадают, но когда я начинаю добавлять логические тесты в микс, я, похоже, не могу найти способ заставить Excel найти правильную ячейку для индексации. Вот моя текущая итерация этой формулы (здесь мне не хватает окончательных критериев. У меня есть только шаги 1 и 2 из моей логики в этом уравнении, нужно будет добавить окончательные критерии, как только я их сглажу).

Вот моя формула:

 =IF(AND(
       COUNTIFS(Table2[dept],[@dept],Table2[class],[@class])>0,
       COUNTIFS(Table2[fine],[@fine])<1),
  INDEX(Table2[markup],MATCH(Table1[[#Headers],[cus1]]amp;[@dept]amp;[@class],Table2[custype]amp;Table2[dept]amp;Table2[class],0)),
  INDEX(Table2[markup],MATCH(Table1[[#Headers],[cus1]]amp;[@dept]amp;[@class]amp;[@fine],Table2[custype]amp;Table2[dept]amp;Table2[class]amp;Table2[fine],0)))
  

Разбивка формулы:

Если table2[dept] совпадают [@dept] и table2[class] совпадают [@class] , а table2[fine] != [@fine] затем сопоставляют значения в table2 и возвращают индекс разметки. Проблема с этой формулой заключается в том, что она возвращает первый экземпляр отдела / класса и игнорирует, отсутствует ли класс или нет. Строка 3 в таблице 1 возвращает 0,65 и должна возвращать 0,4.

Комментарии:

1. Это немного сбивает с толку — вы хотите, чтобы три #N / A в table1 были #N / A, или он должен найти строку, соответствующую первым двум (dept и class), или в противном случае это просто dept?

Ответ №1:

Вы можете попробовать следующую формулу:

 =INDEX(M:M,
   AGGREGATE(15,6,
      ROW(Table2[markup])/
      (((([@dept]=Table2[dept])*4 (([@class]=Table2[class])*3) (([@fine]=Table2[fine])*2 (""=Table2[class]) (""=Table2[fine]))))=
      MAX(((([@dept]=Table2[dept])*4 (([@class]=Table2[class])*3) (([@fine]=Table2[fine])*2 (""=Table2[class]) (""=Table2[fine])))))),1))
  

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

Комментарии:

1. Большое вам спасибо за усилия по этому. Это очень интересный подход, который я раньше не рассматривал. Я никогда не использовал агрегатную функцию на практике, поэтому я потрачу некоторое время на ее анализ, чтобы лучше понять. После утреннего обновления я смог решить свою проблему. Вот моя формула:

2. =IFERROR(ИНДЕКС(Таблица2[разметка],СОВПАДЕНИЕ(1,(Таблица1[[#заголовки],[cus1]] =Таблица2[пользовательский тип])*([@dept]=Таблица2[отдел])*([@class]=Таблица2[класс])*([@нормально]= Таблица2[нормально]),0)),IFERROR(ИНДЕКС(Таблица2[разметка],СОВПАДЕНИЕ(1,(Таблица1[[#заголовки],[cus1]] =Таблица2[пользовательский тип])*([@dept]=Таблица2[отдел])*([@класс]= Таблица2[класс])*(«»= Таблица2[нормально]),0)),ИНДЕКС(Таблица2[разметка],СОВПАДЕНИЕ(1,(Таблица1[[#Заголовки],[cus1]] =Таблица2[пользовательский тип])*([@dept]=Таблица2[отдел])*(«» = Таблица2 [класс])*(«»= Таблица2[нормально]),0))))