VLOOKUP (INDEX-MATCH) 返回第 n 个结果,带有 n 个变量
VLOOKUP (INDEX-MATCH) returning nth result, with n variable
我有以下两个 table:
我想从第二个 table 中检索 ID CODE,尊重重复值的顺序,即如果 duplicated1@gmail.com 是第一个,我想要第一个 ID CODE,如果第二个是第二个等等
我有公式 INDEX-MATCH 来获取第 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:$A2;$A2)=1; INDEX('Table2'!$E:$E;MATCH(A2; 'Table2'!$D:$D;0)); IF(COUNTIF($A:$A2;$A2)=2; INDEX('Table2'!$E:$E; SMALL(IF( 'Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;1;1))+1);2)); IF(COUNTIF($A:$A2;$A2)=3; INDEX('Table2'!$E:$E; SMALL(IF( 'Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;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 留在这里,得到预期的结果:
也许下面的公式可以帮到你:
=INDEX($E:$E;AGGREGATE(15;6;(A2=$D:$D)/(A2=$D:$D)*ROW($D:$D)-1;COUNTIF($A:A2;A2)))
作为@basic 答案的替代方案,感谢他的直觉,我将post 在这里使用 COUNTIF($A$2:A2;A2) 作为参数简化我的公式:
{=INDEX('Table 2'!$E:$E;SMALL(IF('Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;1;1))+1);COUNTIF($A:$A2;A2)))}
我有以下两个 table:
我想从第二个 table 中检索 ID CODE,尊重重复值的顺序,即如果 duplicated1@gmail.com 是第一个,我想要第一个 ID CODE,如果第二个是第二个等等
我有公式 INDEX-MATCH 来获取第 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:$A2;$A2)=1; INDEX('Table2'!$E:$E;MATCH(A2; 'Table2'!$D:$D;0)); IF(COUNTIF($A:$A2;$A2)=2; INDEX('Table2'!$E:$E; SMALL(IF( 'Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;1;1))+1);2)); IF(COUNTIF($A:$A2;$A2)=3; INDEX('Table2'!$E:$E; SMALL(IF( 'Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;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 留在这里,得到预期的结果:
也许下面的公式可以帮到你:
=INDEX($E:$E;AGGREGATE(15;6;(A2=$D:$D)/(A2=$D:$D)*ROW($D:$D)-1;COUNTIF($A:A2;A2)))
作为@basic 答案的替代方案,感谢他的直觉,我将post 在这里使用 COUNTIF($A$2:A2;A2) 作为参数简化我的公式:
{=INDEX('Table 2'!$E:$E;SMALL(IF('Table2'!$D:$D=A2;ROW('Table2'!$D:$D)-ROW(INDEX('Table2'!$D:$D;1;1))+1);COUNTIF($A:$A2;A2)))}