使用 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)
我在两个 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)