答案1
如果您愿意创建几个“辅助列”,这会容易得多。最简单的方法是将它们放在 Sheet 1 上(您可以隐藏它们,或将它们放在右侧很远的地方(例如,列Y
和Z
),如果您愿意的话 — 或者您甚至可以将它们放在另一张表上。我假设我们使用列Y
和Z
作为辅助列,“客户 ID”和“产品 ID”分别位于列A
和中B
,数据从第 2 行开始(标题在第 1 行中)。
输入以下值和公式:
Y2
→0
Y3
→=IF(A3=A4, Y2, Y2+1)
Z2
→=IF(A1=A2, Z1 & ", " & B2, B2)
向下拖动/填充Y3
数据。您应该得到如下结果:Z2
列Y
标识单个客户的行范围。如果下一行的客户 ID 与此行不同(即,如果这是此客户的最后一行),我们将上一个Y
值(即上面的行)加 1。否则,复制上一个值。
列Z
构建每个客户的产品列表。如果前一行的客户编号与这一行相同,则意味着当前行不是该客户的第一行,因此我们从上一行获取值Z
并从这一行附加产品。否则,这是该客户的第一行,所以我们只需从这一行中取出产品即可。(如果您按相反的顺序阅读前两句话,可能会更有意义。)
现在,转到 Sheet2。与之前相同;我假设“客户 ID”和“产品”分别位于列A
和B
中,数据从第 2 行开始(标题在第 1 行)。输入以下公式:
A2
→=INDEX(Sheet1!A:A, MATCH(ROW()-1, Sheet1!Y:Y, 0))
B2
→=INDEX(Sheet1!Z:Z, MATCH(ROW()-1, Sheet1!Y:Y, 0))
并向下拖动/填充。
请注意,这两个公式有一个共同的表达式:
MATCH(ROW()-1, Sheet1!Y:Y, 0)
。该表达式查找 Sheet1 上的第一行,其Y
值为当前(Sheet2)行号减 1。因此,Sheet2 的第 2 行查找 1,Sheet2 的第 3 行查找 2,等等。请记住,Sheet1!Y
对于客户,最后一行的值会增加 1。因此,Column 中的公式A
提取Sheet1!A
该行的值,即下一个唯一客户 ID,Column 中的公式B
提取Sheet1!Z
该行的值,即该客户的产品列表:
答案2
虽然需要进行一些调整,但经过反复尝试后,它终于可以合并两个包含“一些”不同数据的相同电子表格。每个电子表格都超过 15,000 行和 132 列!随机抽查都很好!这为我节省了大量时间,谢谢!