2014-02-27 69 views
2

我在Excel中編寫了一個VBA腳本,它將新數據添加到數據表中,幷包含以前的信息。在此之前,新數據被複制到臨時數據表中。爲了防止重複,我創建了一個額外的列並執行一個VLOOKUP的ID。如果來自新導入數據的ID與舊數據一起已經在數據表中,則該行被標記爲重複且將被刪除。然後將「非複製行」複製到最終的數據表中,在那裏存儲所有的數據。加快重複刪除

現在我使用的是列引用:在VLOOKUP(A A)和我不知道,也許這就是爲什麼VBA腳本每天都需要更多的資源和時間來運行的原因。當我第一次編碼時,我在原始數據表中做了不超過4000行的測試,並在導入的數據中做了4000行。該宏在90秒後完成。目前,它需要超過5分鐘的時間,數據的數據表只有40,000行大,而新的數據總是大約4000行。

我應該動態地引用範圍在VLOOKUP而不是使用的:A或它不會在速度方面有關係嗎?

+2

顯示您的代碼。如果您在Worksheet上使用VLOOKUP功能,那將非常慢。 YOu可以在VBA中完成所有這些操作,而無需操作工作表。不過,我可能會使用與VLOOKUP不同的功能。可能還有其他方法可以優化,但我們首先需要看看你做了什麼。 –

+3

動態引用範圍不會受到傷害,但將陣列用於如此大量的記錄是我的建議。以這種方式考慮一下,您擁有的4000個條目中的每一個條目都會查看40,000個其他條目以查找匹配項。 ID是否是數字?他們是誰的名字?數據是什麼樣的?可能有更有效的方法來查找重複。我可能會建議你複製所有的數據,並使用「數據」功能區下的excel「刪除重複」功能,我只是在100,000個條目的虛擬數據集上運行它,並花了3到4秒。 – pegicity

+3

如果你有唯一的ID,那麼'Scripting.Dictionary'查找的速度會快幾個數量級。 –

回答

1

正如我在評論中提及,肯定是實現使用VBA這一任務的方式,但有時simpliest解決方案是最好的。我建議每次添加所有40K記錄,並使用包含您的唯一值的列使用「數據」功能區下的「刪除重複項」功能。

+1

,如果你仍然想使用宏這一行將做到這一點(Excel 2007年和以上):.Range(「Firstcolumnx」,「Endcolumny」)。RemoveDuplicates Columns:= 1,Header:= xlYes – agustin