1. Vlookup应该是新手最常遇到的速度变慢问题。一般原因是在需要反复vlookup时直接手动往下拖。这样你每搜索一次都需要把整个搜寻区域复制一遍,然后传输到另个计算模块中,哪怕每次搜索的区域都是一样的。要避免这个问题的最简的办法就是用Ctrl+Shift+ 回车快捷键,可一次性搜索多个结果。具体方法是:选中你要输出的整个区域,然后在公式栏输入 =vlookup(选中整个你要搜索的数据区域,选中整个要被搜索的区域,后面的参数和平时一样不变),然后不要按回车,而是按Ctrl + Shift + 回车。 过两天我会上图详解。
2. 动态方程。有些方程,只要你的表格任何的地方发生改变,它都会被重新算一次,被称之为动态方程。常见的有today(), offset等。如果此时你有什么复杂的计算需用到这些方程的计算结果,那些计算也会被重新算。不到万不得已千万不要用这些方程。
3. 把Excel当数据库用。大量的原始数据和中间计算结果直接存在表格里,一开始用的方便,数据量一大就是SB了。我们公司一个老交易员的Excel表格有250MB. 打开表格要1分钟。这个问题并没有什么简的解决办法。最好的作法当然是把数据储存交给专业语言如sql,但一般初学者要搞这个还是太麻烦。我的建议是当你的数据达到100MB的时候,恭喜你,你处理的工作已经开始有点复杂了,去学门专业的编程语言吧。建议的顺序是:VBA, MATLAB, SQL.
4. 计算没有调成手动。表格大,关联度复杂的时候,经常牵一发而动全身,导致修改时异常痛苦。把计算模式改成手动,这样等改完了只用算一次就行了。
5. VBA代码反复读取数据。这也是个新手常见问题,有些入门级的VBA教材还直接这样教,害人不浅。最常见的案例是,要处理一个表格,比如把每个行加起来,写VBA代码时,算完一行输出一行,再读取下一行的数据。。。一定要记住,表格与VBA之间的沟通非常非常非慢,VBA内自己的数据读取调整非常非常快,因此若干要处理一个表格,一定要先把整个表格读进去,在里面处理完了一次性输出。
6. 我的经验是,如果是需要反复使用的表格,能用VBA实现的,则尽量避开在表格内使用公式。例如,你做了一个界面,显示某个表格的第N列的数据,N由用户决定。有的人在输出区域直接写上公式。我一般是做个按钮,点完以后通过VBA把用户要的结果抄过来。这样不仅块,而且可控,不会出现公式人不小心删了之类的鬼事。 我总觉得若长期坚持用表格内公式而避开VBA容易走上邪路。我们公司有位分析师就这样,写表格内公式已经写成神了,公式动不动就要写3、4行!各种INDEX MATCH 叠在一起,看上去像天书。
7. 复杂点的数据计算还是别强求VBA了吧。用其他语言写个dll插件速度会快很多。