我需要根据每个工作表中的ID列将两个Excel工作表中的行合并为一个长行。实际上,我想在两个工作表上执行SQL JOIN的等价生成一个组合工作表。Excel“加入”功能
我可以在第一个工作表中为一行获取一个Range对象,然后使用ID列获取第二个工作表中相应行的Range对象。现在我需要将它们结合起来。
我知道合并和联盟的VBA方法,但我不认为他们做我需要的东西。
如何组合这两个范围对象?
例如: 工作表1行:A,B,C 工作表2行:d,E,F
合并行:A,B,C,d,E,F
我需要根据每个工作表中的ID列将两个Excel工作表中的行合并为一个长行。实际上,我想在两个工作表上执行SQL JOIN的等价生成一个组合工作表。Excel“加入”功能
我可以在第一个工作表中为一行获取一个Range对象,然后使用ID列获取第二个工作表中相应行的Range对象。现在我需要将它们结合起来。
我知道合并和联盟的VBA方法,但我不认为他们做我需要的东西。
如何组合这两个范围对象?
例如: 工作表1行:A,B,C 工作表2行:d,E,F
合并行:A,B,C,d,E,F
你能在工作表1的d列中放入一个公式,在工作表2的dlookup上查找匹配的ID并返回值。然后为其他列e和f重复此操作?
如果您的2个工作表处于同一封闭工作簿中,我认为您最终可以使用adodb对他们使用SQL查询。
dim cnn As ADODB.Connection
dim rst As ADODB.Recordset
strProv = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
SourceFile & ";Extended Properties=Excel 8.0;"
cnn.Open strProv
Set rst = New ADODB.Recordset
strSql = "select * from [Sheet1$]"
rst.Open strSql, cnn
rngDestRange.CopyFromRecordset rst
我一直在使用该技术,但一次只能使用一个表格。所以我不是100%肯定这个连接是被支持的,但你可以试试看。
Robin Day的解决方案的替代方法是使用Match()获取行位置,然后使用Index()来检索数据。如果您有大量数据,这应该会更快。这是假设1:1的关系。该函数的形式如下:
=MATCH(RowID, OtherTable, 0)
=INDEX(OtherTable, MATCH(), ColumnPosition)
试想一下,在VLOOKUP
功能,具有FALSE
作为其最后一个参数。它确实是你想要的。
您是否考虑迁移到Access? Excel不是数据库... – 2009-08-13 14:44:34