Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1507|回复: 0

养成哪些好习惯能让 Excel 运行更快?(转自知乎)

[复制链接]
发表于 2017-2-24 11:01 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2017-2-24 11:02 编辑

养成哪些好习惯能让 Excel 运行更快?有时候就算表格只有1、2M大小的时候,在进行大规模的运算时右下角还是会跳出来运算进度,一等就是一两分钟,运气不好就死掉。
有时候表格就算上20M也会很快处理掉。操作都是简单的操作,十万行左右规模的筛选之类的,可能旁边还挂着VLOOKUP同时运算。
除去机器性能的影响外,还有什么其他的习惯能让EXCEL运算速度加快?跟数据格式之类的有关系么?


关注者
2660

被浏览
37206






2 条评论分享

邀请回答举报

收起

关注问题写回答









20 个回答默认排序




Lee Sam


学习历史,预测未来


242 人赞同了该回答


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插件速度会快很多。编辑于 2016-01-10

24221 条评论分享

收藏
收起







龙逸凡


《“偷懒”的技术:打造财务Excel达人》办公类畅销榜第三名(当当网17年1月)


299 人赞同了该回答


       就因为打开知乎多看了一眼,让我瞌睡少睡了二个小时。为了回答这个问题,我将本人新出版的《“偷懒”的技术:打造财务Excel达人》第一章使用Excel的理念心法的内容,结合搜集到的资料,补充完善,修订成本答案,尽量体系化、学术化,以符合知乎的专业精神。希望对你有帮助。
要提高表格的计算效率,可考虑从以下方面进行规划和优化:
一、     首先要合理设计数据的布局,这是计算效率得到保障的前提
Excel引用访问本工作表、不同工作簿或工作表数据的速度是有区别的,通常计算指向其他工作表的引用比计算工作表内的引用速度要慢。当数据计算量较大时,就必须考虑数据的整体布局:数据是分工作簿保存、分工作表保存,还是保存在同一工作表。
       基于整体性原则,如果是清单型数据表格,可能的话,尽量将数据整合同一工作表,至少尽量在同一工作簿。
如果不能整合在同一工作簿,宁愿使用少量的大型工作簿,也不要使用数量较多的小型工作簿。
尽可能地避免工作簿间的链接,对外部工作簿进行链接,既影响表格的打开速度,并且当工作簿移动或删除时,还容易出现断链,不易于查找和修复。
二、不可避免引用其他工作簿时的提速技巧
       对关闭的工作簿尽量使用简单的直接单元格引用。这样做可以避免在重新计算任何工作簿时重新计算所有链接的工作簿。
       如果不能避免使用链接的工作簿,最好将它们全部打开而不是关闭,并且表格打开顺序也有讲究,要首先打开要链接到的工作簿,然后再打开包含链接的工作簿。一般来说,从打开的工作簿比从关闭的工作簿中读取链接的速度要快。
进一步提速的“断舍离”大法:
断:数据量大的表格,应将已经计算出结果且不会再更新的单元格的公式计算结果采用选择性粘贴方式转化为数值,以减少计算量;
舍:尽量不要大范围使用计算量大的功能或公式。比如:尽管条件格式和数据有效性的功能非常实用,数组公式运算功能也非常强大,但是,大量使用它们会明显降低计算速度,除非你愿意忍受蜗牛般的运算速度,否则,不要大范围使用数据有效性、条件格式和数组公式;
离:如果某张工作表需要进行大量运算,且其他工作表对它的引用较少,可考虑将其移出本工作簿。以免每次重新计算时,影响工作簿的整体计算速度。
三、     原始数据要规范
       原始数据一定要规范,否则,还要使用函数公式清洗不规范的数据,徒增中间环节,影响计算速度。比如数据的来源不是手工输入,是从其他系统导出,导出的数据可能并不规范,比如数字是文本格式、数字后有空格、不可见字符,这些数据就没法直接参与运算,如果不手工整理成规范数据,还得用函数公式进行规避,这就大大影响计算速度。
四、     要关注公式函数的计算效率,尽量使用效率高的函数,或使用其他功能代替。
       1.    非必要的情况下,不使用可变函数(易失性函数)。
       Excel的可变函数有:RAND、NOW、TODAY、OFFSET、CELL、INDIRECT和 INFO。可变函数有个特点,当数值发生变化时,每次都要重新计算,因而会影响表格的计算性能。
       比如,我们常用的下面的公式来定义动态区域:
       =OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
       它的好处是:会自动扩展以包含新条目,但表格的计算性能会降低,这是因为 OFFSET 是可变函数,并且由于 OFFSET 中的 COUNTA 函数必须检查很多行,计算效率较低。
       一般情况下,我们可以使用Excel的表格功能来代替动态区域(Excel 2003中称为列表)。表格功能非常实用,当表格的最末行最末列添加记录或字段后,引用此表格的公式或透视表会自动扩展相关区域,比起使用自定义名称来定义动态区域更方便。
       2.    使用其他行和列计算并存储中间结果一次,以便在其他公式中重复使用它们。并且,如前所述,尽可能引用其他单元格已有的计算结果,这样可提高运算效率。

在C2单元格输入公式:
=SUM($A$2:$A2)
       然后向下填充公式到 C2000。如上图。B列的公式是上一累加结果加上本行数字。B列的公式是引用了上一行单元格的计算结果,B列公式比C列公式单元格引用总数减少了 500 倍,计算量大大减少。
       3.    减少每个公式中的引用数,最大程度地减少函数中的引用单元格范围。
尽管在 Excel 2007以后的版本中,数组公式可以处理整列引用,但是这会强制计算列中的所有单元格,包括空单元格。这样会使表格计算起来很缓慢。
       4.    尽可能使用最有效的函数(一般情况下自定义函数慢于 Excel 中的内置函数),编制适当的公式,尽可能减少公式的计算次数
=IF(ISERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)),"查无此人",VLOOKUP("龙逸凡",$A$2:$C$1000,3,0))
       如果表格A2:A1000中有“龙逸凡”, 使用上面这个公式,则 Excel 要运算VLOOKUP函数两次。Excel 2007以后的版本中,可以使用 IFERROR 来减少运算的次数:
=IFERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)," 查无此人")
五、     非必要的情况下不使用会触发重新计算的操作
       以下操作会触发重新计算:
1.    在自动模式下单:击行或列分隔符。
2.    在工作表中插入或删除行、列或单元格。
3.    添加、更改或删除已定义名称。
4.    在自动模式下重命名工作表或更改工作表位置。
5.    在表格中使用筛选、隐藏或取消隐藏行。
6.  在自动模式下打开工作簿。如果工作簿上次由不同版本的 Excel 计算,则打开工作簿通常导致完整计算。
7.    选中了“保存前自动重算”选项的情况下在手动模式下保存工作簿。
六、     可能的情况下先对数据进行排序,再使用查找引用。尽可能避免对未排序数据执行查找,因为速度很慢。
       1.  如果使用完全匹配选项,则函数的计算时间与找到匹配项之前扫描的单元格数成比例。对于在较大区域内执行的查找,此时间可能非常长。对排序数据使用 VLOOKUP、HLOOKUP 和MATCH 的近似匹配选项的查找时间很短,并且不会根据所查找的区域长度显著增加。
       2.  因为完全匹配查找可能很慢,所以应该考虑使用以下可以提高性能的方法:
Ø  使用一张工作表。使查找和数据位于同一工作表中运行速度更快。
Ø  如果可以,请首先对数据进行排序,并使用近似匹配。
Ø  如果必须使用完全匹配查找,请将要扫描的单元格区域限制在最小范围内。使用动态区域名称或表格(列表)功能,而不是引用大量行或列。
七、 做到了前面六点,表格的运算速度还是很慢时,将Excel的计算模式改为手动计算,在需要时再重新计算。
       在手动计算模式下,可以通过按 【F9】触发智能重新计算。使用【Shift+F9】 仅重新计算所选工作表,按【Ctrl+Alt+F9】强制对所有公式执行完整计算,也可以通过按【Ctrl+Shift+ Alt+F9】 强制彻底重新构建依赖项和执行完整计算。
F9计算所有打开的工作簿中的所有工作表。
按 Shift+F9 可计算活动工作表。
按 Ctrl+Alt+F9 可计算所有打开的工作簿中的所有工作表,不管它们自上次计算以来是否已更改。
如果按Ctrl+Alt+Shift+F9,则会重新检查相关公式,然后计算所有打开的工作簿中的所有单元格,其中包括未标记为需要计算的单元格。

---分-----隔-----线-----
下面是本人新书介绍,不想了解的知友,请直接关闭本网页。
---分-----隔-----线-----
本人新出版的《“偷懒”的技术:打造财务Excel达人》是一本教你如何巧用Excel“偷懒”的书,集数据管理理念和Excel实用技巧于一身,尽管书名为打造财务Excel达人,但书中涉及财务专业知识很少,其他非财务人士也完全可以阅读。因为很少有Excel书象本书一样,从数据管理理念和规范化操作来讲解,也没有哪一本书象本书从理论高度、并配以丰富的财经杂志的表格为实例讲解表格美化。
本书在当当网家庭与办公室用书类的新书榜排名第一。欢迎大家购买支持。
编辑于 2015-01-24

29920 条评论分享

收藏
收起







胖了又瘦了


贵乎真是药丸


6 人赞同了该回答


    Dim s As Style, i As Long, c As Long
    On Error Resume Next
    If Not ActiveWorkbook Is Nothing Then
        c = ActiveWorkbook.Styles.Count
        For i = c To 1 Step -1
            If i Mod 600 = 0 Then DoEvents
            Set s = ActiveWorkbook.Styles(i)
            Application.StatusBar = "Deleting " & c - i + 1 & " of " & c & " " & s.Name
            If Not s.BuiltIn Then
                s.Delete
                If Err.Description = "You cannot use this command on a protected sheet. To use this command, you must first unprotect the sheet (Review tab, Changes group, Unprotect Sheet button). You may be prompted for a password." Then
                    MsgBox Err.Description & vbCr & "You may have to unprotect all of the sheets in the workbook.", vbExclamation, "Remove Styles AddIn"
                    Exit For
                End If
            End If
        Next
        Application.StatusBar = False
    End If
End Sub
有空来一发
叫我雷锋发布于 2015-01-23

613 条评论分享

收藏






陈锡卢


《Excel效率手册 早做完,不加班》系列丛书作者


4 人赞同了该回答


少用公式,多用透视表或者技巧;不用设置太多格式发布于 2015-01-23

4添加评论分享

收藏






Sylar


Software Developer


8 人赞同了该回答


多图预警
问题的结论很简单,面对这种数据量,最好别用Excel,可以用Sql。但最好,最直接的方式是CSV做数据存储,处理用Python的Pandas(如果有数据库,pandas也可以直接调数据库),你绝对会飞起来。读取数据,计算,导出,图表都是飞起的状态。
1.数据处理开始啦


什么?快30M了,打开得要多久啊


花了800多ms。当然转成CSV用Excel打开也花不了多久了,但是估计也要将近10S。
浏览下数据
机智的同学估计发现这些数据来源哪儿了(公司数据拿出来分析算泄密,社工库拿出来又要来管我要)
先统计一下男女比例,Plot一下

哇,好多光棍
透视一下数据

制表
可以看出男女随着时间增加的增长情况,用上Seaborn后,图片的样式明显精致了很多
再检索一下160万条数据,一次检索1S多一点
操作还有很多,不赘述,展示的只有千分之一的功能,关键是,代码是什么

除开空格,引用,一共7行代码。你说你从来没学过编程,你确定你学不会这个?编辑于 2016-11-07

82 条评论分享

收藏
收起







语虚何以言知


邀请我最好提供文档网盘链接,数据敏感按原数据环境模拟或+q。节约题主和答题者时间!




简单的说 ,合理的数据结构,使用数据透视表或者sql in excl  或者vba 都能提高数据运算的速度发布于 2015-01-24

0添加评论分享

收藏






张三李四


不精通体位




改用Access,也许再稍微学两句SQL,绝对飞一般的感觉。编辑于 2015-01-24

01 条评论分享

收藏






Shawn




5 人赞同了该回答


需要复制粘贴大量数据的时候,不要直接粘贴,要粘贴成值。发布于 2015-01-26

5添加评论分享

收藏






Symeon W




4 人赞同了该回答


excel小白之前在实习时候经常处理特别多的数据,就简单讲一下自己的小tips:
1.尽量打开较少的工作簿,文件一旦多必然慢啊。
      更详细的说,如果有其他文件引用尽量放在同一个工作簿里,减少工作簿之外的文件的引用,比如可以放入其他工作表。这样做也可以避免文件删除引起的各种错乱,也方便后面的修改。
2.公式问题。尽量不要用过于复杂的公式,宁可多加一列作为中转数据处理列。过于复杂的公式一则容易出错,二则不方便其他人观阅,三则运算起来慢。
3.选择性粘贴公式比往下拉公式快很多!并且这样操作熟练后很方便的,再也不需要鼠标往下拖啦。其次可以避免遇到空格,拖公式停下来的情况。
3. 要有规范的公式数据源。如果数据来源不规范,第一步一定是处理规范数据,磨刀不误砍柴工。
4.个人习惯将含有大量数据及公式的文件调成手动计算,只要思路清晰,最后一步计算,避免写一个公式计算一次,时间也节约很多。
5.还有数据透视表真的非常非常好用啊,比什么公式高效得多!
以上都是现在想到的日常小tips,有空再来补充啊。不多说了,搬砖去了。对了,毕竟小白,还望大神指正。编辑于 2015-01-26

4添加评论分享

收藏






秋小侠


以真心真我度一生


1 人赞同了该回答


一个好办法是把表格设置一下,不要让表格每次修改都重算。
在修改好数据以后统一按F9重算。
工作的关系我有一个几十万条数据的CRM表,经常更新,上面还有一堆我写的vlookup公式,有些还有多重嵌套的vlookup公式。不用这种方法,每次修改一个小数据都是漫长的等待。
以下是excel 2013的设置截图。
编辑于 2016-12-18

1添加评论分享

收藏






Trisolar


大爱Excel,7个公式解决9成问题




10秒应用两个小招减少等待99%
-----------------------------------
帮我查询下这个号码。
没…………问…………题…………

Excel文件用久了,数据越来越大,公式越来越多,速度就越来越慢。
原来有一个搞咨询的大牛和我说为什么Excel这么慢,Excel就像一辆满载各种工具的卡车,有时候你只想要一个扳手,但是当你打开Excel,它还是给了你一辆卡车
写个公式等30秒,搁谁谁也受不了。
我们需要给Excel加速。怎么做呢?

1. 关闭自动计算Excel默认对公式进行自动计算,每次操作都会重新算一遍全表公式。作为表格的最终掌控者,你不需要它每次都帮你算。

调整为手动计算。当你写完公式后需要校验结果时按F9手动重新计算(是一个按键F9,不是字母"F"+数字"9")

2. 另存为xlsbxlsb格式是什么?
xlsb是二进制表格文件。你最有可能接触它的地方是Excel自动生成的个人宏工作簿。
Excel数据工作原理是这样的,在硬盘上它使用xml这样的人类可读语言储存信息,比如写作<row r=5 /row>这样,在工作时转化为机器的语言0101010到内存里喂给电脑。计算一遍r=5到机器的010101肯定费时间啊对不对?而xlsb格式就直接在硬盘上储存010101。
这样造成xlsb格式的主要优势:
1. 运行速度快
2. 储存空间小
而功能上对Excel来说完全没有任何区别,只是形式上的不同而已,你还替Excel省了一步呢,Excel表示很开心。
那为什么Excel不能直接存010101呢?其中一个最主要的原因是:
Excel要协作。
巨硬公司打造的是一个平台,一个全生态,Excel出来的结果不是Office自己用,SAP也会用,Oracle也会用,IOS平台会有,Android平台也会有,一个包容的格式才是好格式。兼容并包的格式是个的伟大梦想。

但是拍拍脑门儿想想你工作中有多少机会需要你的表格跳出Excel去应对跨软件跨平台协作问题啊?
如果你的工作真需要解决复杂到这个地步的问题,估计,这篇文章的旁门左道一定不入你法眼!
其他人,放心大胆地去用吧,这格式是Excel自带格式,亲儿子,非常安全。

3. 其他方法
上述两个立竿见影,一秒见效。绝对是居(ao)家(ye)旅(jia)行(ban),制(de)表(se)做(zhuang)数(B)必备良方。如果你用着数十万行的大公式计算表,快速设置后可以降低99%的等待时间。如果仍然需要继续优化,需要投入更多的时间精力。
比如

(1) 公式只保留第一行
这个模仿数据库的更新方法。如果你使用的是一个数十万行的大数据表,而里面涉及计算,为什么要把公式储存几十万遍呢?储存一个结果比如42,比储存计算过程要简便的多。
操作时,一列30万行公式计算,平时只留第一行为公式,剩下粘贴为值。数据有更新时重新填充公式,再F9,然后再粘贴为值只留第一行公式。能剩下小一半的文件体积。

(2) 谨慎使用数组公式
数组公式非常绚丽,但是也非常吃CPU。没有什么问题是一个“好的数据结构”+“简单公式”解决不了的,如果有,那是甲方脑残,得加钱!

(3)复杂公式使用VBA代替
还是那个3行原则: 公式超过3行,请考虑VBA!
这么复杂的公式设计第二天睡起来保证你忘记为什么。公式代码这种反人类的语言必须要有注释,我又不是AlphaGo……

(4) 谨慎使用照相机功能
一个照相机照片抵得过10万个公式。我是说在拖累你电脑速度方面。
那我非得用动态截图功能怎么办?这么高端的功能还要用在大数据表格下,大哥你很前卫了,可以研究下VBA。

(5) 优化公式
比如用查询表代替计算啊(参照“微软Excel世界杯大赛(果然名字就是越长越好)复赛题讲解"),比如优先进行数据结构优化啊(参照"动态外汇汇率计算"篇),等等等等。
所以天下武学,无坚不破,唯快不破!


"给我在每个循环里加入暂停0.1秒,将来优化速度好向客户要钱!"
"好的老板!没问题老板!"

有关参考文章参见:

四大Excel
7个公式解决9成问题


(图片来自网络,侵删)

以上。编辑于 2017-02-08

0添加评论分享

收藏
收起





匿名用户




恕我直言这样规模的数据用EXCEL无论怎么样都是愚蠢的做法
快快换工具吧发布于 2015-12-12

0添加评论分享

收藏




匿名用户




你所面临的问题就是开发数据库的原因……
对于SQL语言需要一分钟的工作量,使用VB可能是几个小时的工作量,使用工作表函数可能是几天甚至几周的工作量,使用纯手工录入可能是你半辈子的工作量……
智者,善假于物也。
如果你所操作的数据行数过多,不妨试一试使用Access、SQLServer等数据库来执行。
不要把编程想得太神秘,编程只是把你那复杂的计划肢解成一条条弱智的命令而已,难者不会,会者不难吧。
学会这些对你还有一个好处:如果你分析问题侧重于因果式推导,你以后思考问题的维度将和以前大大不同。这大概是自行车和汽车的差距吧。
而且更让人兴奋的是,人类目前还没有研制出真正的“火车”和“飞机”(人工智能),你有机会触摸文明的前沿……发布于 2015-12-12

0添加评论分享

收藏




匿名用户




推荐stata,处理数据很快,修改起来也方便。代码容易上手。发布于 2015-12-12

0添加评论分享

收藏






Zack Zhong


什么都不会...好惭愧




有marco用xlsb格式,不仅空间小很多了,速度也会快发布于 2015-12-12

0添加评论分享

收藏






兔鼻子


Use Excel for a living




如果经常从外部(网页,其他表格)复制粘贴数据到表格,并且表格文件还被很多人使用编辑的话,注意清理Styles,Invalid Ranges, Objects( especially unwanted invisible ones)。编辑于 2015-03-13

0添加评论分享

收藏






真彩


会计




把需要运算的数据创建为表,对提高运算速度非常有效,特别是大规模的数据。操作也超级简单,插入->表,试试吧。编辑于 2015-03-10

0添加评论分享

收藏






赵惜墨


对,我就是百度的




用Python自己寫腳本唄, 多方便发布于 2015-01-31

0添加评论分享

收藏






李云






是不是有很多数组公式,少用数组公式;count类公式少用;尽量不要整列引用发布于 2015-01-24

0添加评论分享

收藏




匿名用户




专注黑M$30年的表示,这就像问怎样让马跑得更快而不是想到使用汽车一样。发布于 2015-12-13

0添加评论分享

收藏







2 个回答被折叠(



excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-8 16:30 , Processed in 0.169372 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表