table 表格点击当前行按钮隐藏当前的另一个按钮_Excel表格为什么那么慢已经应该如何解决(四)一类特殊的函数易变函数(volatile function)...

ec0d3cf3011079a44ce1a236e8017edd.png

我们,让Excel变简单

336182cc6bd3a57dfb1474330eb45013.png

今天我们把主题聚焦在一类特殊函数造成的问题上——volatile function。

这一类函数有人把他们翻译成“易变函数”,其实挺贴切的。

本系列其他文章:

Excel表格为什么那么慢已经应该如何解决(一)概述

Excel表格为什么那么慢已经应该如何解决(二)常见求和公式效率分析

Excel表格为什么那么慢已经应该如何解决(三)查找公式的效率分析

75f23f4196b4996c7501150563dd7009.png

什么是易变函数

一个Excel文件中,很可能会包含大量的公式,在一般的情况下,Excel可以保持一个过得去的性能(当然,在有些情况下,你必须仔细设计这些公式,我们在“Excel表格为什么那么慢已经应该如何解决”系列前面的文章中介绍过一些场景)。Excel之所以可以做到这一点,是因为,对于大部分函数,Excel并不会在每一次表格数据发生变化的时候都去计算一遍,只有当该公式引用(直接或间接)的单元格发生变化的时候,Excel采取计算该公式。

采用这个方法,Excel就可以保证每次只计算很小比例的公式,降低了计算量。

但是,如果你的公式中使用了“易变函数”,每次Excel有变化时(比如输入数据),这些公式都会被重新计算,这样就会增加Excel的计算时间。如果有很多这样的公式,Excel的使用体验就会很差。

例如,Rand和Randbetween是两个易变函数。在下面的数据中,B3:E10000使用这两个函数填充:

c150c208c473a6fb1b985e61aa3f2ae2.png

同时,在另一个表的B5:B33使用Sumif函数计算条件求和,引用的区域就是上图的B:E列:

f52db51d887b6b2c08a6dfdab0ad418c.png

正常情况下,如果我们修改别的单元格的值,按说不会引起公式的计算。但是,下面的动图告诉我们,每次我们修改其他单元格,就会导致重算:

5b7135653f00ba26505f38ad998d15fa.gif

注意右下角的计算显示。每次在K列输入一个值,都要等较长时间才能继续下一个操作。表格这样的话,基本上不能忍受了。

336182cc6bd3a57dfb1474330eb45013.png

42b9a6cddb1a167e83cbf1be5e03c0ab.png

有哪些易变函数

在当前普遍使用的Excel各个版本中,易变函数有下面这些:

  • NOW

  • TODAY

  • RANDBETWEEN

  • RAND

  • OFFSET

  • INDIRECT

  • INFO(依赖于参数)

  • CELL(依赖于参数)

  • SUMIF(依赖于参数)

这个清单不是很长。但是有一些经常使用的函数(例如,前面6个函数,尤其是前面四个函数)。

INFO和CELL不常用,而且依赖于参数。我们会在以后适当的时候为大家介绍这两个函数的用法。

这里比较奇怪的是SUMIF函数。在我们的印象里这个函数不应该是易变函数。但是在某些情况下,它会变成易变函数,我们在本文后面会为大家介绍。

另外,这个清单还得添加一个成员

  • 条件格式

出乎所有人的意料。不管你在条件格式里使用什么样的函数,条件格式都可以看作是易变函数。也就是说,条件格式里的函数总是会重新计算。

336182cc6bd3a57dfb1474330eb45013.png

6a5a587d33c987d1edc4b27d6397e968.png

如何知道表格中有易变函数

如果是你自己做的表格,你根据上面的清单对比自然就知道有没有易变函数了。

如果你忘了,或者是别人做的表格,这里有一个简单的方法可以判断是否可能有易变函数:

打开Excel文件,点击保存按钮。然后按F9,然后马上点击关闭按钮,如果Excel提示你需要保存,那么很可能这个文件里有易变函数。

336182cc6bd3a57dfb1474330eb45013.png

14e0c59bd4b17535c93803dfff5f9a5d.png

导致易变函数重新计算的操作

并不是所有操作都会导致易变函数重新计算。下面是一些会引起易变函数及相关单元格重新计算的操作:

  • 输入数据

  • 按F9或者在公式选项卡中点击“开始计算”

  • 删除或插入行或列

  • 保存

  • 筛选

  • 双击行(或列)分隔线调整行高列宽

  • 定义,修改或删除名称

  • 重命名工作表

  • 删除或移动工作表(添加工作表不会引起易变函数重算)

  • 隐藏或取消隐藏行(隐藏列不会导致易变函数重算)

336182cc6bd3a57dfb1474330eb45013.png

ed39e791ee40b32aa8f5e20116c5cbc7.png

如何减少易变函数对计算速度的影响

需要强调的是,易变函数本身的计算速度其实是很快的(大部分情况下),它们对速度的影响主要是会导致跟它们相关的所有单元格都会重新计算,影响的是每次操作Excel的响应速度。

很多人会采用一个显而易见的操作:将计算选项从“自动”改为“手动”:

40d772abb081a1de8041c2c71a195602.png

这样做可以立竿见影的改进Excel的响应时间。

但是,我必须要强调的是这是一个我绝对不会推荐的做法。实际上,我强烈建议:

一定要把计算选项设为“自动”

之所以这么建议,是因为两个原因:首先,你很可能在Excel中将某些报表作为中间结果,这样在你的某些数据修改了的情况下,由于是手动计算模式,这些中间报表并没有更新,从而导致你后续的其他分析错误。其次,你很可能要将这个文件分享给其他人,而其他人并不知道这个计算选项是手动的,这样她就会得到错误的表格数据。

对于大部分的易变函数来说,都有减少负面影响的方法。不过需要针对不同的函数采用不同的方法,篇幅过长,我们放到后续的文章中介绍。今天我们只介绍一下SUMIF的问题。

336182cc6bd3a57dfb1474330eb45013.png

dde3f7b6881d1c61f41ac86236f4dd20.png

特殊的易变函数:SUMIF的问题

一般情况下,SUMIF不是一个易变函数,只有它引用单元格发生变化时,才会重新计算。但是,下面的SUMIF公式是一个易变函数:

=SUMIF(Sheet1!$B$3:$D$10000,Index!$H$2,Sheet1!$E$3:$E$10000)

仔细观察,就会发现这个公式跟我们通常所用的公式是不一样的,它引用了两个区域,但是这两个区域的大小是不一样的,一个是从B到D,共3列,一个是只有E一列。

当SUMIF中各个参数区域引用的单元格个数不一致时,这个公式就会变成易变函数。

解决方法其实也很简单,将这个公式改写成各区域大小一致就可以了:

=SUMIF(Sheet1!$B$3:$D$10000,Index!$H$2,Sheet1!$E$3:$G$10000)

336182cc6bd3a57dfb1474330eb45013.png

好了,今天就分享到这里了!

bb5a3a94c3e9ac68a522d9b7eb5b24b3.png

关注本公众号,点击底部菜单“联系客服”,与客服取得联系,索取“计算性能分析—volatile”案例文件

END

8998f48e6061ddae9904b9101d881b7d.png

关注ExcelEasy关于Excel的一切问题,你都可以在这里找到答案28c94ab1d2ebb93b91cf7f209513eb1d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h5离线应用

h5离线应用 所谓离线应用,就是断网之后还可以运行的应用。h5提供了application cache,可以保存网页的离线数据。CSDN的Markdown编辑器就运用了application cache,在没有网络的情况下,一样可以正常使用,这就是一个很好…

[deviceone开发]-do_RichLabel的简单示例

一、简介 do_RichLabel支持html格式的文本内容,但是只支持部分标签,这个示例列出了一些支持的常用标签,android能支持的标签相对ios更少 二、效果图 三、相关下载 https://github.com/do-project/code4do/tree/master/richlabel_demo 四、相关…

使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用

今天说3件事情:一、由于用户增速超出了我们的预期,为确保法助攻小程序的使用体验,我们购买了更高配置的服务器,目前,内部测试已完成,现决定对服务器进行正式升级。服务器升级时间:8月7日(本周五…

重装Nodejs后,webstorm代码报错问题

项描述现象之前没有问题的代码,突然出现很多奇怪的错误原因没有更新webstorm的Nodejs路径设置造成的解决办法重新设置webstorm的Nodejs路径,见下图 重新选择Nodejs安装目录,点击应用

java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接。前言平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看。java提供了Stream的概念,它可以让我…

mongodb 数组添加_NoSQL之MongoDB——简介

MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性1.文档数据库MongoDB用一个文档来表示一条记录,文档的数据结构由键值对组成。MongoDB文档类似于JSON对象,字段值可能是文档,数组&#xff…

Buying Feed, 2010 Nov (单调队列优化DP)

约翰开车回家,又准备顺路买点饲料了(咦?为啥要说“又”字?)回家的路程一共有 E 公里,这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元。约翰打算买 N 吨饲料&…

一次真实的XXS攻击

这是一个真实的事,一家比较大的公司举办的一个全国性的投票,然而,页面确实写得很烂,做假太容易。 首先,找到投票按钮的源代码: 这个”tp”类就是投票事件的定位关键字。 然后,打开source下的源…

使用Chrome Dev Tools, deb.js调试Javascript小技巧

本文讲介绍一些基于 Chrome Dev Tools 的实用的客户端Javascript 调试小技巧。我将重点关注那些无从下手,不知道该在哪儿添加断点的情景。 首先看下本文主题: 找出哪段代码正在修改了页面找出谁发送了某个ajax请求在抛出异常时触发断点条件断点事件断点…

jenkins Auth fail验证失败

重新设置密码转载于:https://www.cnblogs.com/cocoat/p/5982931.html

CSS3 Perspective

一 、在元素的父元素上使用 在父元素上使用Perspective属性可以使用透视投影视图,在父元素上加上: perspective:400px 表示相机距离屏幕位置为400px。默认相机对准父元素的中心,要重设相机的焦点可以使用: perspective-origin…

状态模式案例分析

需求 初始状态下,【暂停按钮】不可点,所有数轴可调: 点击【动态波】后,【暂停按钮】可点,所有数轴可调: 点击【暂停按钮】后,“暂停”变为“播放”,所有数轴不可调: 分析需求 上面…

Linux系统IP地址

1、IP地址概述 2、配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述,参考《计算机网络》课程。 配置IP地址 [rootweekend110 ~]# ifconfigeth0    Link encap:Ethernet HWadd…

qwidget多个窗口同步_Linux命令screen—终端切换,工作环境保存,画面同步,防断网...

Screen基础Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。创建一个新的窗…

Linux文件基本操作

使用declare命令创建一个变量名为 tmp 的变量: 使用号赋值运算符为变量 tmp 赋值为 dunzhu: 读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值,初学者经常会忘记输入) 在dunzhu家目录创建一…

DES 加密 解密

EncryptUtil feiyangklDES 一行代码完成DES加密,加密模式 DES CBC DEMO GIF DEMO 简介 最近项目中用到DES加密,在这里整理成篇,供大家参考阅读,在使用该demo过程中,你可能会遇到一些问题,首先你需要看一下…

markdown绘图插件----mermaid简介

作者:黄永刚 mermaid简介 当撰写文档的时候,对于流程图的生成大多使用Visio等繁重的工具,没有一种轻便的工具能够画图从而简化文档的编写,就像markdown那样。 mermaid解决这个痛点,这是一个类似markdown语法的脚本语言…

Java NIO 教程

NIO 概述 NIO有三个核心组件: 通道(Channels)缓冲器(Buffers)选择器(Selectors) 实际上,NIO的组件和类远不止这三个,但这个三个组件是核心。至于其它组件,…

threejs相机和渲染器

渲染器 渲染器其实代表的是canvas标签。 渲染器的类型 WebGLRender 使用WebGL来渲染图形,速度较快,但是有些机器不支持WebGL。 CanvasRender 使用canvas2d来渲染图形,在较老的版本上,主要是用来渲染2D图形。现在这个渲染器在…

threejs概览

threejs术语和概念 threejs的API很长,有很多概念和术语,理解了这些概念和术语,才能更好的使用threejs。这些概念和术语都藏在API右侧的大纲中,下图简单整理了一下这些概念: 这些概念又分为四个大类(见上图…