【问题标题】:How can I select all the instances in which the values of Columns A & B in Sheet 1 are exactly equal to Columns A & B of Sheet 2?如何选择表 1 中的 A 列和 B 列的值与表 2 的 A 列和 B 列完全相等的所有实例?
【发布时间】:2017-10-31 05:28:05
【问题描述】:

这个非常具体,但基本上我得到了两个数据转储(.xls 格式):一个来自旧系统,一个来自新系统。新系统的转储中还有很多行,但我想删除旧系统的转储中已经找到的行。

每个工作表包含大约 10 列,但其中只有 2 列实际上具有潜在匹配值。

所以我的问题可以概括为:如何选择所有实例,其中工作表 1(旧转储)中的 A 列和 B 列的值完全等于工作表 2 的 A 列和 B 列(新转储)?

【问题讨论】:

  • 向我们展示您的 vba 脚本,以便我们以更好的方式帮助您。我个人会将 xls 文件转换为 csv,用 Python 或 javascript 解析它,然后应用列表理解技术。但我想这不是你想要的。
  • 这可能是我想要的。我对此很陌生,边走边学。我还没有 VBA 脚本,只是想知道如何着手解决这个问题。
  • 它们是否在同一个文件中?
  • 是的,作为 .xlsx 文档中的两个单独的工作表。虽然我也将它们作为单独的文件。
  • A 列有很多重复的值,B 列也有很多重复的值。但是,A&B 的每个组合都是唯一的。这是两个数据集之间的共同点,也是我尝试使用规则的目标。

标签: database excel vba xlsx xls


【解决方案1】:

您可以在工作表 1 和工作表 2 中添加一个辅助列。并在连接列 A 和列 B 中放置一个公式,例如

=A1&B1

在下面的图片中,K 列的公式将 A 列和 B 列的值组合在一起。 L 列用于说明目的,向您展示 K 列中包含的公式是什么。

在旧表中:

在 sheet2 中,您有辅助列 K 和列 L 中的附加公式,如下图所示。在这种情况下,M 列向您显示 L 列中的公式:

L 列的公式为:

=IF(ISNA(MATCH(K2,Old!K:K,0)),"Keep","Delete")

内部查看新数据转储中的 K 列值是否可以在旧数据转储的 K 列中找到,即 A 列和 B 列值是否匹配。

MATCH(K2,Old!K:K,0) 'This would be MATCH(K2,Sheet1!K:K,0) in your case

如果未找到匹配项,即在新列中找到特定列 A 和 B 组合但在旧列中未找到,则 MATCH 公式将返回 #N/A

L 列公式的外部使用ISNA() 测试此错误 错误返回 True,否则返回 False。

将此放在 L 列(在 sheet2 中)的 IF() 语句中,您有一个公式,如果找到匹配“删除”,如果未找到“保留”。

然后,您可以在 L 列中过滤“删除”条目,然后将其删除。

【讨论】:

  • 这太棒了,非常感谢。虽然由于某种原因它不会显示“保留”和“删除”,但只是 TRUE 或 FALSE。不过,这仍然可以正常工作,谢谢。
  • 你需要确保你有公式 =IF(ISNA(MATCH(K2,Old!K:K,0)),"Keep","Delete")
  • 让它显示得很好,非常感谢 QHarr。一直试图解决这个问题; “助手”列是我没有正确考虑的。谢谢你这么详细。
猜你喜欢
  • 2021-12-01
  • 2021-05-09
  • 2018-06-20
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多