使用匹配ID连接行

我有多行的购买细节。 每笔购买都有一个客户ID。 出于演示的目的,我需要将具有类似客户端ID的购买合并到一个单元中,以便我可以使用VLOOKUP将其显示在具有客户端信息的另一个表中。 有任何想法吗?

在下面的例子中,我想单元格C2包含“1,2”,单元格C3包含“3”和单元格C4为空(帐单没有购买)。

ABC 1 client_id name purchase_ids 2 1 jim 3 2 bob 4 3 bill purchase_id purchase_client_id amount 1 1 100 2 1 500 3 2 50 

恐怕你将不得不用VBA(macros编程)弄脏你的手来做你想做的事情。

没有可以创build一个集中列表的Excel函数。 Excel函数CONCATENATE不会做你所需要的:

 =CONCATENATE(A1, "-", B1) # returns "foo-bar" if A1 has 'foo' and B1 has 'bar' 

所以VBA是你需要的。 幸运的是, 其他人已经在这里,包括这个答案 。

您可以创build一个dynamic数据透视表到新工作表中,按照ClientID汇总销售额,然后使用VLOOKUP( http://www.tips-for-excel.com/2011/06/how-to-make-a -pivot-table / )。

示例数据表 示例数据表

由ClientID汇总的枢轴表 由ClientID汇总的枢轴表

这里还有一个build议,用VBA做一个单元格中的数据收集function。 做了这个前一段时间,但你可以使用和编辑它为你自己的目的 –

 Option Explicit Public Function STRINGCONCATENATEVLOOKUP(ByVal r As Range, ByVal criteria As Variant, Optional ByVal colnum As Long, Optional ByVal separator As String) As String On Error GoTo err_hand Dim n As Long Dim result As String If colnum = Empty Then colnum = r.Columns.Count If colnum > r.Columns.Count Or colnum < 1 Then STRINGCONCATENATEVLOOKUP = "#COLVALUE!" Exit Function End If If separator = "" Then separator = ";" For n = 1 To r.Rows.Count Step 1 If r.Cells(n, 1).Value = criteria Then result = result & r.Cells(n, colnum).Value & separator Next result = Left(result, Len(result) - Len(separator)) STRINGCONCATENATEVLOOKUP = result Exit Function err_hand: STRINGCONCATENATEVLOOKUP = CVErr(xlErrValue) End Function 

函数就像VLOOKUP一样工作,但是差别是它将所有数据相加并返回一个由“;”分隔的string。 或者你所定义的。

我的回答需要MOREFUNC插件*

这里我假设购买“表”中的数据是在A9:C11中。 相应地调整。

公式C2: {=MCONCAT(IF($B$9:$B$11=A2,$A$9:$A$11,""),",")}

注意大括号。 这是一个数组公式,你必须使用Ctrl+Shift+Enter来确认,而不仅仅是Enter

然后将公式复制到C3和C4


MOREFUNC ADDON

  • Morefunc Addon是一个包含66个新工作表函数的免费库。
  • 这里是一些信息(由原作者)
  • 这里是我发现的最后一个工作下载链接
  • 这里是一个很好的安装步行video