2009-08-13 51 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作爲其最後一個參數。它確實是你想要的。