[Excel]如何将多个查询结果置于一个单元格

上周有热心的小伙伴提问,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函数有三个参数,分别为: 1.Lookupvalue: 需要查询的值,比如,印度、中国等; 2.LookupRange: 这个需要查询的值出现的区域; 3.ColumnNumber: 找到这个查询值位置后的第N列为查询结果,在这个案例中为2

看一看运行以后的结果呗! Bingo!

VBA是不是在这个时候感觉特别的犀利,一下子就让你摆脱了18个函数的嵌套! 不过这个VBA只能对付原数据不出现重复的情况。 如果原数据有重复,比如,有两个 印度Joe,又怎么样才能在最终的结果中避免重复呢? 回复 查询 二字,火箭君将告诉你这个自定义函数该如何构建。