我需要根據每個工作表中的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