如何将多行合并为一列

如何将多行合并为一列

我的情况如下。我需要列出 38000 个客户帐户,并将信息分类到特定模板,以便导入到我们的新网站。但是数据呈现的方式让这变得很困难...

为 1 位客户保存的每个地址都是单独的一行。因此,如果您有不同的帐单或送货地址,则将有 2 行。有时是 3 行。我需要将这些行移动到 1 行下的列(地址 1、地址 2 等)。因此,如果 CustomerA 有 3 个已保存的地址,我需要将这 3 行移动到 1 行的 3 列中。我希望这有意义。

我不知道公式、数据透视表或 VBA(我在这方面的了解程度与 Jon Snow 相当)是否是最佳途径。我尝试过数据透视表,但效果并不好。我认为 Index/Match 可能是最佳解决方案 - 我只需要为每个 Address 列复制公式,但它可以完成工作。但是我不知道如何容纳多行。

下面是我收到的数据示例。第 20 行是我需要将行移入的模板。列 g_user id 对于每个客户都是唯一的,但如果单个客户有多行地址,则该值将在电子表格中重复。customer_no 也是如此。

http://www.filedropper.com/excelhelp

或查看此图片

如果您需要更多信息,请告诉我,我会尽力进一步解释。

编辑 - 从我发布的电子表格中,我需要取出第 2 行和第 3 行,并将地址信息移动到第 1 行的新列中。因此,由于地址有 2 列,城市是 1,州是 1,邮政编码是 1,国家是 1,这使得这两行的数据总共有 12 列。

答案1

  1. 选择一个空白单元格用于放置合并的内容,在公式栏中输入公式 =CONCATENATE(TRANSPOSE(B2:B19)),然后选择公式的 TRANSPOSE(B2:B19) 部分,然后按 F9 键。您可以看到公式已更改,如下面的屏幕截图所示。

在此处输入图片描述

  1. 从公式栏中的公式中删除花括号,然后按 Enter 键。

答案2

我喜欢使用 VBA 来完成这样的任务。假设您有一个唯一的用户 ID(如示例表中所示),您可以执行以下操作:

Sub Addresses_To_Columns()

    Dim lastRow As Long
    Dim addressCount As Integer: addressCount = 0

    lastRow = Range("A" & Rows.Count).End(xlUp).Row

    For i = lastRow To 3 Step -1
        If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
            addressCount = addressCount + 1
            Range(Cells(i - 1, 10), Cells(i - 1, (addressCount * 6) + 10)) = Range(Cells(i, 4), Cells(i, (addressCount * 6) + 4)).Value
            Rows(i).Delete
        Else
            addressCount = 0
        End If
    Next i

End Sub

这将变成这样: 在此处输入图片描述

变成这样: 在此处输入图片描述

此代码需要定制以适合您的特定格式。另请注意,这只是作为概念验证而快速完成的,可能缺少一些常见的最佳实践。请在尝试此代码之前备份您的数据,因为它确实包含删除命令以删除重复的行。

答案3

谢谢大家的帮助和建议。但是我使用另一种方法解决了这个问题。

我只是将 '-1'、'-2'、'-3' 连接到“唯一”客户 ID。然后,我对需要添加的每个新列执行 VLOOKUP 查找唯一-1、-2、-3 值。

希望我们为赢得声誉而付出的所有时间和努力都是值得的。

答案4

如果我正确理解了您的疑问,这是一个非常简单的解决方案。当然,请确保先备份电子表格。

1) 在正确位置添加所需数量的新列。假设新列为 N。

2) 我假设客户 ID 在 A 列中,并且同一客户的新地址行在该行的 A 列中具有相同的编号。最后假设每个客户的第一行除了地址外还有最完整的详细信息,即姓名电话等(如果不是,则使用排序,首先按客户编号排序,然后按姓名排序)。

3)在单元格 N2 中输入以下公式:

=if(and(a3=a2,a1<>a2),h3,"")

其中 H 是包含地址的列。如果下一行有相同的客户编号 (a3=a2),并且此行是新客户,即客户编号与上一行不同 (a1<>a2),则这将从下一行获取地址并将其放入该客户的主行中。对该地址的所有其他部分重复此操作,以便移动所有信息。即相同的公式,但在 O2 而不是 N2 中引用 i3 而不是 h3,依此类推。

4) 对第 3 个地址执行类似的公式。即假设 X 列是第 3 个地址的新列,在 X2 中输入:

=if(and(a4=a2,a1<>a2),h4,"")

基本相同,只是取下面两行的信息。

5) 现在,所有地址都应位于每个客户的“主”行中。现在您需要复制所有这些地址,然后使用“选择性粘贴 - 值”将它们粘贴到相同的位置。这将摆脱公式,只将地址作为数据,就像您输入的一样。

6) 现在使用按客户名称排序将所有名称为空白的行(因为它们只是额外的地址)放到一个位置。然后删除所有这些行,确保所需的所有数据现在都在正确的行中。瞧

相关内容