【问题标题】:Concatenate Rows with Matching IDs连接具有匹配 ID 的行
【发布时间】:2014-08-24 03:51:15
【问题描述】:

我有多行购买详情。每次购买都有一个客户 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

【问题讨论】:

  • 为什么这被否决了?
  • 可能因为您要求某人为您工作而被否决。请参阅How to ask 页面,了解如何从该网站获得最大收益。
  • 请看一下如何提问页面。这个网站的运作方式与其他论坛不同。
  • 我再次阅读了您的问题,看看我是否遗漏了什么。我可以问你很多问题,这些问题应该已经在问题中了。 merge 是什么意思?你的决赛桌是什么样子的?你的原始数据是什么样的?你已经尝试过什么?
  • 关于您的赏金,您所说的可信/官方来源是什么意思?

标签: vba excel


【解决方案1】:

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

示例数据表

按 ClientID 汇总的数据透视表

【讨论】:

  • 谢谢,但我希望合并具有公共 ID 的行,以便可以在另一个表格的单元格中显示它们,因为我需要其他表格列。
【解决方案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 类似,但不同之处在于它将所有数据相加并返回一个以“;”分隔的字符串或您定义的内容。

【讨论】:

    【解决方案3】:

    恐怕你将不得不使用 VBA(宏编程)来做你想做的事。

    没有可以创建连续列表的 Excel 函数。 Excel 函数CONCATENATE 不能满足您的需求:

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

    所以 VBA 是您所需要的。幸运的是,others 以前来过这里,包括这个SO answer

    【讨论】:

    • 谢谢,我刚刚发现了这一点,它工作得很好,但如果我过滤表格,它不会过滤掉值。 mrexcel.com/forum/excel-questions/… 关于如何使其尊重过滤值的任何线索?感谢您的所有帮助。
    • @Kode 就这个具体问题提出一个新问题!它应该是通用的(即不是关于你的具体情况),并且应该包括你目前拥有的代码。这就是 Stack Overflow 的工作原理!
    • 这里有一个更详细的问题:stackoverflow.com/questions/25515606/… 仍然转向 Stack Overflow 思维方式。我很抱歉。
    【解决方案4】:

    我的答案需要 MOREFUNC 插件*

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

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

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

    然后将公式复制到C3和C4


    更多功能插件

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2019-04-22
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多