上周有热心的小伙伴提问,excel中怎么样才能便捷地将所有查询结果放置到一个单元格中?据说她费了九牛二虎之力,嵌套了18个函数,终于实现了她的诉求。那真的需要18个函数之多吗?
问题回顾
左边为一个两列的表格,分别是国家以及对应的人名。而这个小伙伴的问题则是怎么才能按照国家,将所有该国家的人名列到一个单元格内。
问题解法
这是一个一对多的查询,显然利用常规的lookup函数是很难解决这个问题。因此,火箭君建议使用VBA来实现此要求。
VBA源代码在此:
Function SingleCellExtract(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
Dim i As Long
Dim Result As String
For i = 1 To LookupRange.Columns(1).Cells.Count
If LookupRange.Cells(i, 1) = Lookupvalue
Then
Result = Result & " " & LookupRange.Cells(i, ColumnNumber) & ","
End If
Next i
SingleCellExtract = Left(Result, Len(Result) – 1) End Function
>>>分析下这个代码的构成:
这是一个自定义的函数,它构建了一个类似lookup的函数,只不过它能够实现一对多的效果。
这个SingleCellExtract函数有三个参数,分别为:
Lookupvalue: 需要查询的值,比如,印度、中国等;
LookupRange: 这个需要查询的值出现的区域;
ColumnNumber: 找到这个查询值位置后的第N列为查询结果,在这个案例中为2
看一看运行以后的结果呗!
Bingo!
VBA是不是在这个时候感觉特别的犀利,一下子就让你摆脱了18个函数的嵌套!
不过这个VBA只能对付原数据不出现重复的情况。
如果原数据有重复,比如,有两个印度的Joe,又怎么样才能在最终的结果中避免重复呢?
在我们的公众号中,回复查询二字,火箭君将告诉你这个自定义函数该如何构建。