【问题标题】:Comparing two excel Sheets using VBA使用 VBA 比较两个 Excel 表格
【发布时间】:2015-07-19 02:45:24
【问题描述】:

我在两张纸的 A 列中有一个地址列表。 sheet1 和 sheet2

我只是想知道是否有一种有效的方法来比较两张表中的数据并执行以下操作;

从 sheet1 中删除不在 sheet2 中的地址。

将 sheet2 中不在 sheet1 中的地址添加到 sheet1 的末尾。

我最初的意图是循环,但这显然不是有效的内存,因为每张纸上大约有 10000 个地址。

【问题讨论】:

  • 您是否考虑过使用Range.find()?
  • 您确定需要 VBA 吗?您是否考虑过在 sheet1 的另一列中添加 MATCH 公式以查找完全匹配、按升序排序以对所有 #N/As 进行分组并删除这些行?
  • 我不需要,但下面的答案似乎很完美。

标签: vba excel comparison


【解决方案1】:

是的 - Microsoft Query(Excel 中的 SQL)。

您可以通过Data->From Other Sources->Microsoft Query访问它

SQL 在比较/合并/更新多个数据源方面非常出色。请参阅我的blog post here 的这一部分。 Microsoft Query 也将比任何 VBA 宏都快得多。

你的问题的一个例子:

将第一个工作表减少到两个工作表中的项目

SELECT * FROM [Sheet1$] AS S1 INNER JOIN [Sheet2$] AS S2 on S1.Address=S2.Address

选择新地址

SELECT S2.Address FROM [Sheet2$] AS S2 LEFT JOIN [Sheet1$] AS S1 on S1.Address=S2.Address
WHERE IsNull(S1.Address)

同时加入

SELECT * FROM [Sheet1$] AS S1 INNER JOIN [Sheet2$] AS S2 on S1.Address=S2.Address
UNION ALL
SELECT S2.Address FROM [Sheet2$] AS S2 LEFT JOIN [Sheet1$] AS S1 on S1.Address=S2.Address
WHERE IsNull(S1.Address)

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多