使用excel中的内置函数查找列中的最后一个匹配项

dws*_*ein 9 excel vba excel-vba excel-formula

我有一个excel工作簿,具有相同客户端ID的多个实例.因此,客户端可以在列表中出现多次.我想找到客户端ID的最后一个(最接近底部)实例,这样我就可以查看同一行以获取更多信息.VLOOKUP显示了第一个实例,我需要最后一个实例.

那么,如何使用内置函数找到给定客户端ID的最后一个实例?我宁愿不写宏来做这件事.

Dmi*_*liv 22

假设您要"id_1"在范围内查找id的最后一个实例A2:A8并从范围返回相应的值B2:B8,然后使用:

=LOOKUP(2,1/(A2:A8="id_1"),B2:B8)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


如果要在范围内返回id的最后一个intance的索引,请使用:"id_1"A2:A8

=MATCH(2,1/(A2:A8="id_1"))
Run Code Online (Sandbox Code Playgroud)

带数组输入(CTRL+ SHIFT+ ENTER).

如果要返回id的最后一个intance的行号"id_1",请使用:

=LOOKUP(2,1/(A2:A8="id_1"),ROW(A2:A8))
Run Code Online (Sandbox Code Playgroud)

这种语法是一个特殊的技巧:(A2:A8="id_1")求值为{TRUE,FALSE,FALSE,TRUE,...}.接下来,假设TRUE=1FALSE=0,部分1/{TRUE,FALSE,FALSE,TRUE,...}给你{1,#DIV0!,#DIV0!,1,..}.

返回结果数组中的最后一个数字lookup_value应该大于lookup_array {1,#DIV0!,#DIV0!,1,..}中的任何值(在我们的例子中).由于阵列只包含1或者#DIV0!,我们可以采取2lookup_value,因为它总是大于1.

  • 它是一种特殊trick..`(A2:A8 = "ID_1")`计算结果为`{TRUE,FALSE,FALSE,TRUE,...}`,接着,假设TRUE; =`1`和`FALSE `=`0`,部分`1/{TRUE,FALSE,FALSE,TRUE,...}`给你`{1,#DIV0!,#DIV0!,1,..}`.在结果数组Lookup_Array中应该比Lookup_Array中的任何值时返回_Last number_(`{1,#DIV0!,#DIV0!,1,...}`在我们的情况下),因为数组只包含`1`或者`# DIV0!`,我们可以将`2`作为lookup_value,因为它总是大于`1`. (5认同)