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
。 它正是你想要的。