在Excel中查找每个集合中的最后一个条目

在Excel中查找每个集合中的最后一个条目,excel,vlookup,Excel,Vlookup,在Excel中,如果我在表1中有以下数据: Name | Hobby =============== James | Cooking Phil | Swimming Phil | Golfing Eric | Working Eric | Running Eric | Boarding 以及以下表2: Hobby | Category ==================== Cooking | Not Available Swimming | Available Golf

在Excel中,如果我在
表1
中有以下数据:

Name  | Hobby
===============
James | Cooking
Phil  | Swimming
Phil  | Golfing
Eric  | Working
Eric  | Running
Eric  | Boarding
以及以下
表2

Hobby    | Category
====================
Cooking  | Not Available
Swimming | Available
Golfing  | Available
Working  | Not Available
Running  | Available
Boarding | Available
如何根据
表1
中的
名称从最后一个
爱好的
表2
返回
类别

理想情况下,我在数组/范围中得到的结果如下所示:

 (Categories)
{"Not Available";   (Cooking from James)
 "Available";       (Golfing from Phil)
 "Available"}       (Boarding from Eric)
我知道我可以使用
vlookup
索引匹配
进行常规查找,以获得每个
爱好
类别
,但在这种情况下,我特别感兴趣的是获得每个
姓名
最后一个
爱好
,这是我在搜索后无法找到的


注意,
表1
可能包括空白的
姓名
和/或
爱好
。但是
名称
本身是分组/排序在一起的。

为了便于阅读,我在第三个表中将公式分成了两列。所有3个表都是从同一行开始的Excel表

H2和自动填充,因为是Excel表格

=VLOOKUP(INDEX(Table1[Hobby],MAX(IF(Table1[Name]=Sheet11!$G2,ROW(Table1[Name])-ROW(INDEX(Table1[Name],1,1))+1))),Table2[#All],2,FALSE)
和I2:

= [@Category] & ";  (" & INDEX(Table1[Hobby],MAX(IF(Table1[Name]=Sheet11!$G2,ROW(Table1[Name])-ROW(INDEX(Table1[Name],1,1))+1))) & " from " &[@Name] & ")"

输出:


以下是我解决问题的方法(不需要VBA):

以下是表格:

现在,在C列中,我以以下方式使用了
VLOOKUP

=VLOOKUP(B2, $F$2:$G$7, 2, FALSE)
将其输入C2单元格并向下拖动。然后,在D2中,我输入了一个公式:

=IF(A2<>A3, C2 & " (" & B2 & " from " & A2 & ")", "")
=IF(A2A3,C2&“(&B2&“from”&A2&“,”)
再一次,把它一直拖下去


然后您将得到如图所示的结果。

将名称包含在第三个表中不是会非常容易吗?@Jeeped-sure。老实说,我认为第三个表应该是一个数组,除非它是一个透视表或其他我不知道名称如何是动态的。此外,我还计划计算有多少
可用
不可用
,但我认为无论
名称
列是否存在,都可以这样做。返回每个名称的最后一个非空嗜好和交叉引用可用性非常容易。如果您想增加从结构化表引用返回唯一名称的顺序列表的难度,那么如果没有vba,这可能是不值得的;您最近返回的硬编码值数组将清除所有内容。@Jeeped您将如何执行此操作?如果需要,我可以把它换回来。假设我想做您提到的关于交叉引用可用性的第一个选项。若可能的话,我想返回一组结果。好主意。但是有没有办法让它只返回一个结果数组(或者即使结果在不是最后一个结果的每个结果之间包含类似
false
)。我试图避免使用
A2A3
,因为我想将结果保存在一个单元格中(作为一个数组-是的,我知道数组可以跨越多个单元格),然后将其包装在
countif中。您尝试过吗?