這是一個使用Excel和VBA的基於ADO的解決方案。如果您需要更多有關在Excel/VBA中使用ADO的信息,請嘗試http://support.microsoft.com/kb/257819
我打算假設您的所有三個電子表格都在一個工作簿中,並且它們被命名爲Sheet1,Sheet2和Sheet3。顯然根據需要調整代碼。要使用ADO,請轉到Visual Basic編輯器(通過菜單或通過Alt
- F11
),然後通過工具>參考(或其在後續版本中的等效項)添加對以下項的引用:「Microsoft ActiveX Data Objects 2.8 Library 「
我使用Excel 2003及更早版本的提供程序和連接字符串,因爲這是我擁有的版本。對於Excel 2007及更高版本,使用這些替代(替換過程的文件名):
Provider=Microsoft.ACE.OLEDB.12.0
Data Source=filename;Extended Properties=Excel 12.0 Xml;
(NB,你會經常看到 「HDR =是」 在連接字符串但是這是默認設置爲Excel,因此可以省略)
首先,我們會從原來的三個電子表格創建資產標籤的主列表。創建一個空白工作表並將其稱爲Sheet4,以便我們可以在某處放置該列表。
在一個正常的模塊,添加如下然後運行它:
Sub master_list()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 8.0;"
.Open
End With
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT [Asset Tag] FROM [Sheet1$] UNION SELECT [Asset Tag] FROM [Sheet2$] UNION SELECT [Asset Tag] FROM [Sheet3$];", cn
With Worksheets("Sheet4")
.Cells(1, 1).Value = "Master"
.Cells(2, 1).CopyFromRecordset rs
End With
rs.Close
cn.Close
End Sub
的UNION
運營商在SQL只返回不同的記錄,以便該查詢給我們的資產標籤的完整列表中的所有三個電子表格與沒有重複。我用「大師」作爲列名,以避免任何含糊之處以後
現在我們需要將數據從主列表中的三個獨立的片相結合。創建一個新的空白工作表並調用Sheet5。新增並運行以下命令:
Sub compare_sheets()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 8.0;"
.Open
End With
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM (([Sheet4$] LEFT JOIN [Sheet1$] ON [Sheet4$].[Master] = [Sheet1$].[Asset Tag]) " & _
"LEFT JOIN [Sheet2$] ON [Sheet4$].[Master] = [Sheet2$].[Asset Tag]) " & _
"LEFT JOIN [Sheet3$] ON [Sheet4$].[Master] = [Sheet3$].[Asset Tag];", cn
Dim fld As ADODB.Field
Dim i As Integer
i = 0
With Worksheets("Sheet5")
For Each fld In rs.Fields
i = i + 1
.Cells(1, i).Value = fld.Name
Next fld
.Cells(2, 1).CopyFromRecordset rs
End With
rs.Close
cn.Close
End Sub
這應該可以得出你對資產標籤的主列表呈現三個電子表格中的數據。列名可能有點奇怪(例如「Sheet1 $。資產標籤」等)和所有格式都將丟失,但至少你可以看到哪些表是丟失數據
難道是正確的,查看電子表格作爲主副本中的一個(即每一個資產標籤出現在該電子表格),另外兩個電子表格包含主副本中資產標籤的一些子集?因此,如果每個資產標籤都列在屏幕截圖的C列中,那麼列H和M中的資產標籤列表將包含部分資產從C柱,但除了H和中號的標籤將包含不存在於柱C.這是對行權的任何其他資產標籤? – barrowc
不完全是。C,H,M等也都含有不位於另一個資產標籤標籤列,我的目標是排列匹配的資產標籤,以便我可以驗證其餘的信息是否正確。它還可以幫助按行/ cab排序,因爲第一列是 –
好的。所以,你會需要構建所有資產標籤的主列表,然後從針對主列表中的每個電子表格排隊的記錄(在一個或多個C,H和M是否上市)找到其中的差距是 – barrowc