VLOOKUP (INDEX-MATCH), возвращающий n-й результат, с n-переменной - PullRequest
0 голосов
/ 25 марта 2020

У меня есть следующие две таблицы:

Table 1

Table 2

Я хочу получить из второй таблицы - ИД-КОД, соблюдая порядок для дублированных значений, т. е. если duplicated1@gmail.com первый, то я хочу первый ИД-КОД, если второй - второй и т. д. c.

У меня есть формула ИНДЕКС- СОВПАДАЙТЕ, чтобы получить n-е значение, и оно отлично работает:

{=INDEX(array,SMALL(IF(vals=val,ROW(vals)-ROW(INDEX(vals,1,1))+1),nth))}

Здесь можно найти более подробное объяснение: https://exceljet.net/formula/get-nth-match-with-index-match

Моя проблема в том, что я надеваю не имеет фиксированного n-го значения, но оно изменяется в зависимости от кардинальной позиции дублированного значения.

Я сейчас использую эту формулу с успехом:

IF(COUNTIF($A$2:$A2;$A2)=1; INDEX('Table2'!$E$1:$E$18;MATCH(A2; 'Table2'!$D$1:$D$18;0)); IF(COUNTIF($A$2:$A2;$A2)=2; INDEX('Table2'!$E$1:$E$18; SMALL(IF( 'Table2'!$D$1:$D$18=A2;ROW('Table2'!$D$1:$D$18)-ROW(INDEX('Table2'!$D$1:$D$18;1;1))+1);2)); IF(COUNTIF($A$2:$A2;$A2)=3; INDEX('Table2'!$E$1:$E$18; SMALL(IF( 'Table2'!$D$1:$D$18=A2;ROW('Table2'!$D$1:$D$18)-ROW(INDEX('Table2'!$D$1:$D$18;1;1))+1);3));"")))

, которая в основном использует Смешанный справочник Excel и переводится как:

IF(COUNTIF(Dynamic Range, Mail Table 1 Value) = 1; Use INDEX-MATCH Formula with nth parameter set to 1; IF(COUNTIF(Dynamic Range, Mail Table 1 Value) = 2; Use INDEX-MATCH Formula with nth parameter set to 2;
IF(COUNTIF(Dynamic Range, Mail Table 1 Value) = 3; Use INDEX-MATCH Formula with nth parameter set to 3;""))

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

Я оставлю здесь таблицу с ожидаемыми результатами:

Table 3

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Возможно, следующая формула может вам помочь:

=INDEX($E$2:$E$18;AGGREGATE(15;6;(A2=$D$2:$D$18)/(A2=$D$2:$D$18)*ROW($D$2:$D$18)-1;COUNTIF($A$2:A2;A2)))

enter image description here

0 голосов
/ 25 марта 2020

В качестве альтернативы ответу @ basi c и благодаря его интуиции я опубликую здесь мою упрощенную формулу, используя COUNTIF ($ A $ 2: A2; A2) в качестве параметра:

{=INDEX('Table 2'!$E$2:$E$18;SMALL(IF('Table2'!$D$1:$D$18=A2;ROW('Table2'!$D$1:$D$18)-ROW(INDEX('Table2'!$D$1:$D$18;1;1))+1);COUNTIF($A$2:$A2;A2)))}
...