使用匹配ID连接行

时间:2014-08-24 03:51:15

标签: excel vba excel-vba

我有多行购买详情。每次购买都有一个客户ID。出于演示目的,我需要将具有类似客户端ID的购买合并到一个单元格中,这样我就可以使用VLOOKUP在另一个具有客户端信息的表中显示它。有什么想法吗?

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

     A       B      C
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

4 个答案:

答案 0 :(得分:2)

您可以在新工作表中创建动态数据透视表,按ClientID汇总销售,然后将该表与VLOOKUP(http://www.tips-for-excel.com/2011/06/how-to-make-a-pivot-table/)一起使用。

示例数据表 Example data sheet

ClientID汇总的数据透视表 Pivot table summarized by ClientID

答案 1 :(得分:2)

这里有另一个建议,做一个用VBA收集一个单元格中的数据的函数。在前一段时间完成,但你可以使用&根据自己的目的编辑它 -

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类似,但区别在于它汇总所有数据并返回以“;”分隔的字符串或者你定义的内容。

答案 2 :(得分:1)

我担心你不得不用VBA(宏编程)来做你想做的事情。

没有Excel功能可以创建一个连心列表。 Excel函数CONCATENATE无法满足您的需求:

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

所以VBA就是你需要的。幸运的是,others之前一直在这里,包括SO answer

答案 3 :(得分:0)

我的回答需要MOREFUNC addon *

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

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

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

然后将公式复制到C3和C4


MOREFUNC ADDON