2009-08-13 49 views
3

我需要根据每个工作表中的ID列将两个Excel工作表中的行合并为一个长行。实际上,我想在两个工作表上执行SQL JOIN的等价生成一个组合工作表。Excel“加入”功能

我可以在第一个工作表中为一行获取一个Range对象,然后使用ID列获取第二个工作表中相应行的Range对象。现在我需要将它们结合起来。

我知道合并和联盟的VBA方法,但我不认为他们做我需要的东西。

如何组合这两个范围对象?

例如: 工作表1行:A,B,C 工作表2行:d,E,F

合并行:A,B,C,d,E,F

+0

您是否考虑迁移到Access? Excel不是数据库... – 2009-08-13 14:44:34

回答

3

你能在工作表1的d列中放入一个公式,在工作表2的dlookup上查找匹配的ID并返回值。然后为其他列e和f重复此操作?

0

如果您的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%肯定这个连接是被支持的,但你可以试试看。

1

Robin Day的解决方案的替代方法是使用Match()获取行位置,然后使用Index()来检索数据。如果您有大量数据,这应该会更快。这是假设1:1的关系。该函数的形式如下:

=MATCH(RowID, OtherTable, 0)

=INDEX(OtherTable, MATCH(), ColumnPosition)

0

试想一下,在VLOOKUP功能,具有FALSE作为其最后一个参数。它确实是你想要的。