Excel“join”function

我需要根据每个工作表中的ID列将两个Excel工作表中的行合并成一个长行。 实际上,我想要在两个工作表上执行SQL JOIN的equivilent来生成一个组合的工作表。

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

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

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

例如:工作表1行:a,b,c工作表2行:d,e,f

组合的行:a,b,c,d,e,f

你可以在工作表1的d列中添加一个公式,在工作表2的列表中进行查找,find匹配的ID并返回值。 然后重复这个为其他列e和f?

Robin Day的解决scheme的替代方法是使用Match()获取行位置,然后使用Index()来检索数据。 如果你有很多的数据,这应该会更快。 这是假设1:1的关系。 这些function的forms是:

=MATCH(RowID, OtherTable, 0)

=INDEX(OtherTable, MATCH(), ColumnPosition)

如果你的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%肯定的join是支持的,但你可以试试看。

只要看看VLOOKUP函数,最后一个参数是FALSE 。 它正是你想要的。