2017-04-07 29 views
0

我有一個超過1,000,000行的Excel表,我需要執行一些vlookups/countif語句。我應該使用所有數據在單張紙上運行我的VB宏嗎,還是將數據分成不同的單張紙張,然後在每張紙上運行宏,這樣可以節省大量時間?有沒有可以幫助我做出這個決定的等式?我應該把我的數據分成幾個小塊嗎?

感謝您的幫助。

這裏是我計劃使用,(雖然我更想找一個普遍的答案,如果有一個,當我處理在Excel中的大型數據庫提取我可以申請)的VB:

Sub Find_Space_then_Compare() 
' 
' Finds the Space in the Key, Extracts Character after, and looks for match 
in Sample2 sheet 

ActiveCell.FormulaR1C1 = "=MID(RC[-1],FIND("" "",RC[-1])+1,256)" 
Range("B2").Select 
Selection.AutoFill Destination:=Range("B2:B100") 
Range("B2:B100").Select 
Range("C2").Select 
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Sample2!R81C3:R121C3,1)" 
Range("C2").Select 
Selection.AutoFill Destination:=Range("C2:C100") 
Range("C2:C100").Select 


End Sub 
+1

我不太明白'vlookup'和'countif'與宏有什麼關係。但是,在計算設置爲自動(如果您有該選項)的情況下,在所有這些單元格中不要有超過一百萬個公式是一個好主意。現在,談到速度比較/最佳實踐的問題,在我看來,這個問題對於SO來說有點偏離主題,並且更適合[Code Review](http://codereview.stackexchange.com/)。話雖如此,我只要繼續在任一版本上運行宏,並獲取內部時間來衡量差異:自己測試一下。 – Ralph

+0

我正在運行的宏包括vlookups和countif's。我提到這一點,因爲如果我的函數只是a = left([field],2),那麼足夠短的時間運行一百萬行,足以分割數據不值得我努力。但是= vlookup可能需要多分鐘才能運行。並感謝您的意見。 – Mwspencer

+0

@Ralph一個不包含任何工作代碼的問題在[codereview.se]上沒有任何關係,並且在錘子擊中它之前的壽命是幾秒鐘內測量的。 –

回答

1

這是一個非常糟糕的巨大數據庫,現在我想建議將你的數據庫拆分成幾塊並應用公式。下面是2件的例子。

=IF(NOT(ISNA(VLOOKUP(A1,data1,2,FALSE))),VLOOKUP(A1,data1,2,FALSE),IF(ISNA(VLOOKUP(A1,data2,2,FALSE)),"No Match",VLOOKUP(A1,data2,2,FALSE))) 
相關問題