【发布时间】:2014-06-06 00:00:40
【问题描述】:
我有一个 Excel 工作簿,其中包含相同客户端 ID 的多个实例。因此,一个客户可以在列表中出现多次。我想找到客户端 ID 的最后一个(最接近底部)实例,这样我就可以沿着同一行查看更多信息。 VLOOKUP 显示第一个实例,我需要最后一个。
那么,如何使用内置函数找到给定客户端 ID 的最后一个实例?我宁愿不编写宏来执行此操作。
【问题讨论】:
标签: excel excel-formula vba
我有一个 Excel 工作簿,其中包含相同客户端 ID 的多个实例。因此,一个客户可以在列表中出现多次。我想找到客户端 ID 的最后一个(最接近底部)实例,这样我就可以沿着同一行查看更多信息。 VLOOKUP 显示第一个实例,我需要最后一个。
那么,如何使用内置函数找到给定客户端 ID 的最后一个实例?我宁愿不编写宏来执行此操作。
【问题讨论】:
标签: excel excel-formula vba
假设您想在A2:A8 范围内查找id "id_1" 的最后一个实例,并从B2:B8 范围内返回相应的值,然后使用:
=LOOKUP(2,1/(A2:A8="id_1"),B2:B8)
如果您想返回 A2:A8 范围内 id "id_1" 的最后一个实例的 index,请使用:
=MATCH(2,1/(A2:A8="id_1"))
带有数组条目(CTRL+SHIFT+ENTER)。
如果要返回 id "id_1" 的最后一个实例的行号,请使用:
=LOOKUP(2,1/(A2:A8="id_1"),ROW(A2:A8))
此语法是一个特殊的技巧:(A2:A8="id_1") 的计算结果为 {TRUE,FALSE,FALSE,TRUE,...}。接下来,假设TRUE=1 和FALSE=0,部分1/{TRUE,FALSE,FALSE,TRUE,...} 给你{1,#DIV0!,#DIV0!,1,..}。
返回结果数组中的最后一个数字lookup_value 应该大于lookup_array 中的任何值(在我们的例子中为{1,#DIV0!,#DIV0!,1,..})。由于数组只包含1 或#DIV0!,我们可以将2 视为lookup_value,因为它总是大于1。
【讨论】:
2 被称为Lookup Value。公式中的2 是什么?另外,为什么1/... 是范围?
(A2:A8="id_1") 计算为{TRUE,FALSE,FALSE,TRUE,...},接下来,假设TRUE=1 和FALSE=0,部分1/{TRUE,FALSE,FALSE,TRUE,...} 给你{1,#DIV0!,#DIV0!,1,..}。要返回结果数组中的最后一个数字,lookup_value 应该大于lookup_array 中的任何值(在我们的例子中为{1,#DIV0!,#DIV0!,1,..}),因为数组只包含1 或#DIV0!,我们可以采用2作为lookup_value,因为它总是大于1。
If the LOOKUP can not find an exact match, it chooses the largest value in the array that is less than or equal to the value.(来自here)。您也可以将这个技巧与MATCH 公式一起使用(如我上面的示例),但是它需要数组输入,我个人更喜欢LOOKUP
Vlookup - 不,你不能这样做,但我认为我的第一个Lookup 公式涵盖了所有Vlookup 功能