首先我想说声抱歉,关于合并 Excel 行的问题还有很多,但在浏览了网页和“问题 那 可能 已经 有 你的 回答“,我还是不知道如何解决我的问题。
编辑:似乎可能的解决方案可能会根据我想要合并的不同电子表格中的数据类型而有所不同。在这种情况下,一旦所有数据记录(除了最左边的列)都是数字,使用“合并”函数似乎可以解决问题。我的问题是如何找到数字和文本混合数据的解决方案(文本也可能包含非英文字母)。为了提供更好的例子,问题已被编辑。
我有两个包含不同数据的电子表格。唯一的相似之处是最左侧列的值:
我已经将两个电子表格中的数据合并到一个电子表格中,方法是将其中一个电子表格最左侧列的值粘贴到第二个电子表格最左侧列的值下方。对于其余值,我已将它们粘贴到右侧,因此不同电子表格中的列不会混在一起。完成此操作后,我根据最左侧列的值对电子表格进行了排序,并得到了类似于图中简化示例的结果:
我想要用这个电子表格来消除重复的行,并根据最左边的列合并重复行的数据。插图中提供了一个相应的示例:
一些重要说明:
我更喜欢使用源电子表格,而不是将它们合并为一个未合并的中间电子表格,但我欢迎任何可以帮助我实现目标的解决方案。
数据记录(如上图所示)可能不完整,包含数字和文本。此外,数据记录也可能有误,因此我不能假设给定的列总是包含数字或文本(例如,电子表格 2 的 Shipping 列)。
有些行的最左边的列值仅存在于其中一个电子表格中(例如,“name5”仅来自电子表格 1,而“name3”和“name6”仅来自电子表格 2)。
我尝试避免为此使用 VB 宏,而倾向于使用 Excel 中已有的内置函数。
另一方面,如果没有办法使用 Excel 内置工具完成此任务,我愿意考虑导出到 CSV 并使用正则表达式。在这种情况下,这个问题可能需要在 StackOverflow 上找到新归宿。
答案1
对于数值数据...
尝试使用内置整合特征。
假设我有 ff. 数据工作表1和工作表2, 分别。
- 选择目标单元格。任何单元格/范围都可以,只要有足够的空间容纳结果即可。我建议创建一个新的工作表并突出显示单元格
A1
。 - 去数据>整合。您也可以按Alt+ A, N。
- 选择和。
在下面参考,点击选择参考按钮并突出显示工作表1(包括行标签和标题)。单击添加。
重复上一步,但添加数据工作表2反而。
在下面使用标签,确保顶行&左栏都已选中。您将获得如下结果:
点击好的。
结果:
对于各种类型的数据...
使用合并功能获取唯一的行标签和列标题。清除数据但保留标签/标题:
将此粗略公式输入表格最左侧的空白单元格,然后将其复制下来。替换命名范围以适合您的数据。
=IFERROR(IFERROR( INDEX(sheet1_data,MATCH($A2,sheet1_rowlabels,0),MATCH(B$1,sheet1_headers,0)), INDEX(sheet2_data,MATCH($A2,sheet2_rowlabels,0),MATCH(B$1,sheet2_headers,0))), "")
在哪里
sheet1_data
,sheet1_rowlabels
&sheet1_headers
分别引用Sheet1中的所有数据(A1:C5),第一列(A1:A5)和第一行(A1:C1),
sheet2_data
&sheet2_rowlabels
分别sheet2_headers
引用Sheet2中的所有数据(A1:D6),第一列(A1:A6)和第一行(A1:D1)按所需格式。
答案2
如果我正确理解了您的问题,那么可以使用 VLOOKUP 直接处理这个问题。
首先,您需要创建一个不重复的、已排序的列表,其中包含两个表左侧列中的“项目”值(沿着您在“最终结果”示例中显示的行)。
可以通过以下方式实现:
- 将第一个表中的项目列表复制到要保存最终结果的工作表的 A 列中
- 从第二个表中复制项目列表并将其粘贴到从第一个表中复制的值下方,这样您就有一个长的重复列表
- 使用主页功能区上的 Excel 内置排序功能对重复列表进行排序
- 通过使用鼠标突出显示列表,然后从功能区中选择“数据/删除重复项”来消除重复项
然后,您可以继续设置最终结果表,其中唯一项目值列表作为行标签,并从两个表中复制列标签(再次如您在最终结果示例中所示)。
有了这个 shell,您就可以输入 VLOOKUP 函数来从两个表中提取数据。这个想法是使用一组 VLOOKUP 从第一个表中获取数据,使用另一组 VLOOKUP 从第二个表中获取数据。
以下是最终结果表中第一个单元格的公式:
=IFERROR(IF(VLOOKUP($A2,Sheet1!$A$2:$C$5,2,0)=0,"-",VLOOKUP($A2,Sheet1!$A$2:$C$5,2,0)),"-")
查找的语法是VLOOKUP( lookup_value, table_array, column_index_num, [range_lookup])
。最后一个可选参数“range_lookup”指定查找的匹配是近似的(默认)还是精确的。
因此,公式中的 VLOOKUP(两个 VLOOKUP 相同)在范围 A2:C5 的第一列中的单元格 A2 中查找项目名称,并在范围的第二列(即供应商列)中返回相应的值。由于 VLOOKUP 中的最后一个参数设置为 0(或 FALSE),因此匹配必须精确。
公式中需要使用 IFERROR、IF 和 VLOOKUP 两次来处理项目不匹配的可能性(如果项目“name1”在表 2 中但不在表 1 中,则可能会发生这种情况)或项目匹配,但相应值的单元格为空(否则将返回 0)。
最终结果表的第二列的查找公式与第一列的不同之处仅在于列索引号,该查找公式设置为 3 以返回联系人信息:
使用完全相同的方法从第二个输入表中获取数据,使用引用该表的范围和要返回的相应数据列的 VLOOKUP。请注意,我已将公式设置为在未找到匹配项或没有可用的返回值(即,如果返回值的单元格为空)时返回破折号(“-”)。这可以很容易地更改为空字符串(“”)。当然,一旦结果表第一行的公式设置了对表范围和返回列的正确引用,它们将被复制到项目列表的底部。