使用 VBA 比较两个 excel 工作表

Comparing two excel Sheets using VBA

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

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

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

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

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

是的,有 - Microsoft 查询(Excel 中的 SQL)。

您可以从 Data->From Other Sources->Microsoft Query

访问它

SQL 在 comparing/consolidating/updating 多个数据源中是例外。看我的这一段blog post here。 Microsoft Query 也将比任何 VBA 宏快得多。

您的问题示例:

将第一个工作表缩减为两个工作表中都有的项目

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

Select 新地址

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)