我的情况如下。我需要列出 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
答案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) 现在使用按客户名称排序将所有名称为空白的行(因为它们只是额外的地址)放到一个位置。然后删除所有这些行,确保所需的所有数据现在都在正确的行中。瞧