我想比較兩個Excel文件,並在一張表中存儲新文件中只存在的內容,並在另一張表中存儲舊文件中的內容。 (基本上new - old = sheet1
和old - new = sheet2
。)一個SO answers建議循環遍歷所有單元格並做一個簡單的比較。我對VBA和宏很新,所以我不知道該怎麼做。它是如何完成的(或我可以在哪裏學習到這一點)?VBA宏來比較兩個Excel文件的所有單元格
回答
做NOT循環通過所有單元格!工作表和VBA之間的通信在讀取和寫入方面存在很多開銷。循環遍歷所有單元格的速度會非常慢。我在講話時間。
取而代之,將整個表單一次加載到Variant數組中。在Excel 2003中,這需要大約2秒(和250 MB的RAM)。然後,您可以立即循環播放它。
在Excel 2007及以後,片材是約1000倍(1048576行×16384列= 17個十億細胞相比,65536行×256列= 17 百萬在Excel 2003)。如果您嘗試將整個工作表加載到Variant中,您將遇到「內存不足」錯誤;在我的機器上,我一次只能裝載3200萬個電池。因此,您必須將自己限制在您知道實際數據的範圍內,或者逐位加載圖紙,例如一次30列。
Option Explicit
Sub test()
Dim varSheetA As Variant
Dim varSheetB As Variant
Dim strRangeToCheck As String
Dim iRow As Long
Dim iCol As Long
strRangeToCheck = "A1:IV65536"
' If you know the data will only be in a smaller range, reduce the size of the ranges above.
Debug.Print Now
varSheetA = Worksheets("Sheet1").Range(strRangeToCheck)
varSheetB = Worksheets("Sheet2").Range(strRangeToCheck) ' or whatever your other sheet is.
Debug.Print Now
For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then
' Cells are identical.
' Do nothing.
Else
' Cells are different.
' Code goes here for whatever it is you want to do.
End If
Next iCol
Next iRow
End Sub
來比較紙張不同的工作簿,打開工作簿,並獲得表如下:
Set wbkA = Workbooks.Open(filename:="C:\MyBook.xls")
Set varSheetA = wbkA.Worksheets("Sheet1") ' or whatever sheet you need
+1完全同意,永遠不會遍歷所有單元格 – stema 2011-03-22 09:08:56
好的提示。我意識到只有一列需要迭代。你會如何推薦我這樣做?並將其與另一個工作簿中的列進行比較。相當不同。 – 2011-03-22 09:14:03
刪除For iCol ...下一個iCol循環。將iCol設置爲每張表中需要的值。 – 2011-03-22 13:03:30
一個非常簡單的檢查就可以與單元格的公式做:
表1(新 - 舊)
=(if(AND(Ref_New<>"";Ref_Old="");Ref_New;"")
表2(舊 - 新)
=(if(AND(Ref_Old<>"";Ref_New="");Ref_Old;"")
這個公式應爲英語Excel工作。對於其他語言他們需要翻譯。 (對於德國,我可以幫助)
您需要打開所有三個Excel文檔,那麼第一個公式複製到A1的表1和第二進入A1紙2 的現在,單擊A1的第一個單元格,並標記「Ref_New」,現在您可以選擇您的參考文獻,轉到新文件並在A1中單擊,返回到Sheet1並對舊文件執行「Ref_Old」。替換另一個「Ref_New」。
Doe對於第二張圖是一樣的。
現在,將舊形式A1和新文件中的zour數據全部範圍複製到Formaula A1上。
但兩種情況未涉及:
- 在新的比較電池和舊是相同的數據(產生的細胞將是空的)
- 在所比較的細胞新的和舊的迪菲數據(產生的單元格將爲空)
爲了涵蓋這兩種情況,您還應該創建自己的函數,意思是學習VBA。一個非常有用的Excel頁面是cpearson.com
- 1. 比較Excel中兩個單元格內的文本VBA
- 2. vba宏比較excel中的兩列?
- 3. Excel VBA比較單元格與列
- 4. Excel - 比較兩個文件?
- 5. 比較兩個excel文件
- 6. 比較兩個單獨的文檔VBA
- 7. Excel中的VBA宏保存單元格中的html文件
- 8. Excel將多個單元格與vba進行比較
- 9. vba excel鎖定所有單元格
- 10. 比較兩個excel VBA項目
- 11. 在vba中比較單元格的值
- 12. excel vba代碼來運行單元格公式中的宏
- 13. 如何比較Excel VBA中的單元格位置?
- 14. Java excel:如何比較兩個單元格
- 15. 使用vba可以比較兩個excel文件嗎?
- 16. 使用excel VBA將單元格中的文本與另一個單元格中的「= text」進行比較
- 17. Excel條件格式化兩個單元格的百分比
- 18. Excel宏 - 值比較
- 19. VBA宏來比較和增加值
- 20. VBA - 用於比較兩列的Excel
- 21. Excel比較部分單元格內容
- 22. Excel VBA宏查找和刪除只有一些所需的單元格
- 23. Excel單元格上下文菜單 - 宏
- 24. 比較兩個文件的單列
- 25. vba excel宏(單元格包含特定文本)
- 26. 使用斷言來比較兩個Excel文件
- 27. 用來比較兩個文件夾
- 28. VBA Excel宏根據多個標準更新單元格值
- 29. Excel VBA比較單元格值列表並覆蓋單獨的表中的值
- 30. 使用VBA宏比較列
您可以使用ADO還有:http://stackoverflow.com/questions/ 5388095/is-it-it-it-it-set-foreign-key-between-excel-sheets/5388489#5388489 – Fionnuala 2011-03-22 08:27:03