我应该把我的数据分成几个小块吗?

问题描述:

我有一个超过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]上没有任何关系,并且在锤子击中它之前的寿命是几秒钟内测量的。 –

这是一个非常糟糕的巨大数据库,现在我想建议将你的数据库拆分成几块并应用公式。下面是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)))