这个问题困扰我2天了,白天没有网络,只能研究帮助,从calculate研究到cache,都没有找到更好的办法。晚上在网上只花了5分钟就解决了。...原来是采用易失性函数——faint,我居然第一次听说这个名词。...帮助 Volatile 方法 用于将用户自定义函数标记为易失性函数,无论何时在工作表的任意单元格中进行计算,易失性函数都必须重新进行计算。...非易失性函数只在输入变量改变时才重新计算,若不用于计算工作表单元格的用户自定义函数中,则此方法无效。 语法 expression.Volatile(Volatile) expression 必选。...如果为 True 则将该函数标记为易失性的;如果为 False 则将该函数标记为非易失性的。默认值为 True。
学习Excel技术,关注微信公众号: excelperfect 本文主要讲述何时及为什么要使函数具有易失性。 什么是易失性?...例如,NOW()应该总是在最后一次计算时给出当前时间,RAND()应该在每次计算时给出不同的随机数。这些函数称为易失性函数,任何使用其中一个易失性函数的公式都是易失性公式。...2.使用Ctrl+Alt+F9触发完全计算 如果按Ctrl+Alt+F9组合键,则Excel将重新计算所有打开的工作簿中的每个公式,无论更改了内容还是易失性的。 当然这可能非常慢。...使用=Depends(A1:B1,Z9)调用该函数,以便Excel知道通过theCell1.Offset(0,1)引用B1。 现在,Excel知道函数所依赖的所有单元格,并且将正确且高效地重新计算。...小结 确保用户自定义函数的参数总是直接引用该函数使用的所有单元格。
那么,如何创建动态单元格区域呢?可以使用INDEX函数或者OFFSET函数。许多人倾向于使用INDEX函数,因为OFFSET函数是一个易失性函数。 什么是易失性函数?...每当Excel重新计算电子表格时,无论其引用的单元格有无变化,易失性函数都会重新计算。许多操作都会触发重新计算,例如在单元格中输入数据、插入行等。这样,易失性函数会增加公式的计算时间。...下面列出了一些触发重新计算的操作: 1.输入新的数据 2.删除/插入行/列 3.执行自动筛选 4.双击行列分隔线 5.重命名工作表 6.改变工作表的位置 下面列出了一些易失性函数:CELL函数,INDIRECT...图4:当有6条记录时查找单元格区域中的最后一项 使用INDEX和MATCH函数创建可以扩展和缩小的动态单元格区域 如下图5所示,在单元格E2中是一个数据有效性下拉列表,其内容来源于单元格区域A2:A5,...,而是获取该区域中最后一项的单元格地址(单元格引用)。
例如: B2:D5 表示从单元格B2到单元格D5的区域。 单元格区域运算符将区域内所有单元格合并为一个引用,如下图1所示。 图1 合并运算符 合并运算符是逗号(,)符号。...注意,INDIRECT函数是一个易失性函数,因此使用时要小心。 OFFSET函数 OFFSET函数最多可以有5个参数。...参数Reference是要基于其偏移的单元格;参数Rows是希望引用单元格移动的行数;参数Cols是希望引用单元格移动的列数;参数Height(可选)是想要的区域的行数;参数Width(可选)是想要的区域的列数...单元格F2中返回的结果为23。 图9 注意,OFFSET函数是一个易失性函数,因此使用时要小心。...图10 上图10中的公式实际上就是: =SUM(B2:E5) INDEX函数不是易失性函数,因此应尽可能优先于OFFSET函数和INDIRECT函数使用。
关闭屏幕更新可加快宏的执行速度。这样将看不到宏的执行过程,但宏的执行速度加快了。 当宏结束运行后,请记住将 ScreenUpdating 属性设置回 True。 2....Application.Volatile 方法 用于将用户自定义函数标记为易失性函数,无论何时在工作表的任意单元格中进行计算时,易失性函数都必须重新进行计算。...非易失性函数只在输入变量改变时才重新计算,若不用于计算工作表单元格的用户自定义函数中,则此方法无效。 记录 GetObject获取的表格对象是多应用模式。...range对象的offset属性能整体偏移选择其它范围,并返回它的range对象。 VB中数组维度的问题 Ubound(array,dimenssion),获取指定数组的指定维度的维数上限。...Excel 控制word的时候,要注意 录制的宏里的常量是word环境下的,在Excel里要适配一下。 表格插入控件 可插入的控件分为表单控件和activex控件。
学习Excel技术,关注微信公众号: excelperfect 如果有一个依赖于一些计算慢的资源的用户定义函数,可能希望该用户定义函数在大多数情况下只返回其占用的单元格中最后一次计算得到的值,并且只偶尔使用计算慢的资源...这很慢并且会掩盖其他无意的循环引用,因此不建议使用它。...,但会检索单元格中显示为字符串的格式化值。...因此,如果单元格被格式化为带有2个小数位的数字,则检索到的值将被截断为2个小数位。...下面是名为PREVIOUS的XLL+函数的代码,该函数具有使其成为易失性或非易失性的参数。(命令等效函数默认为易失性,但在使用它将前一个值传递给VBA用户定义函数时,通常希望它是非易失性的)。
当被修改后Excel重新计算工作簿时,计算引擎将通过计算最近修改的公式开始,然后对剩余的公式使用最新的计算序列。...如果计算引擎找到一个公式,该公式依赖于已被处理/修改(或者是易失的)但尚未计算的单元格,则会将公式重新安排到计算链的末尾,以便可以在未计算的单元格之后重新计算。...现在,如果清除立即窗口中的数据,并再次计算公式而不改变任何内容(使用Ctrl+Alt+F9),此时单元格A3仅重新计算一次,因为Excel正在重复使用先前重新计算的最终计算序列。...例如,如果所有参数都被定义为Double,那么Excel将在参数传递给用户定义函数之前尝试将参数强制转换为Double,如果参数实际引用了未计算的单元格,则不会调用用户定义函数。...使用将结果返回到多个单元格的数组用户定义函数是加速用户定义函数执行的一种非常好的方法(请参阅前面的文章),但是应该注意一个导致速度减慢的Bug: 当输入或修改多单元格用户定义函数并且取决于易失性公式时
将动态单元格区域公式定义为名称 创建动态单元格区域的公式不能直接用于创建数据有效性下拉列表。然而,可以将其定义为名称,然后在创建数据有效性下拉列表时使用这个名称。...OFFSET是易失性函数,而INDEX不是。...如果在解决方案面临的情形下,易失性不重要,那么是使用OFFSET还是INDEX看个人喜好。...OFFSET函数使用定义起始位置的输入和单元格大小来创建动态单元格区域,而INDEX函数通过查找单元格引用或行列引用来创建动态单元格区域。...9.99E+307,A2:A10))) 注:本文为电子书《精通Excel数组公式(学习笔记版)》中的一部分内容节选。
2.评估为TRUE或FALSE的逻辑测试会应用到单元格区域。 3.对于单元格区域中的每个单元格,评估测试,如果测试结果为TRUE,该单元格应用格式;如果测试结果为FALSE,该单元格不应用格式。...4.评估为TRUE或FALSE的逻辑公式可以用于创建条件格式。 5.条件格式可以使用非数组公式和数组公式。 6.条件格式是易失性的:经常重新计算,减慢整个工作表的计算时间。...如下图1所示,高亮显示单元格A11中指定的城市名的最小时间所在的行。注意,混合引用$B3允许每个单元格将指定城市的最小值与列B中时间值比较。 ?...图1 如下图2所示,设置条件格式高亮显示指定赛车手最快的两个时间所在的行。在单元格A17中指定赛车手的姓名,单元格B17中指定要显示的时间数量。...单元格D18中的数组公式计算得到指定的时间并作为条件格式的辅助单元格。 ? 图2 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
OFFSET函数可以给我们提供了一个对单元格区域的引用,从给定的起始单元格开始,移动到给定的单元格并扩展给定的高度和宽度。...移动的行数/列数:想要从起始单元格移动多少行/列,可以指定正值、负值或零。 高度,宽度:想要返回的单元格区域大小。例如5,3将指定返回的单元格区域为5行3列。...此外,OFFSET函数的所有参数都可以引用其它单元格,也就是说,可以编写: =OFFSET(B1,B2,B3,B4,B5) 引用的单元格是:以B1为起点,偏移B2中数字指定的行数和B3中数字指定的列数,...有以下两个原因: 如果直接输入对单元格区域的引用,例如A1:C5,那么这个引用是静态的。然而有时候,我们想要单元格区域是动态的,因为数据会不断发生变化,例如在新的行列中添加数据。...图3 OFFSET的局限 虽然使用OFFSET函数的公式可以返回一个动态单元格区域,但它也有一些限制: OFFSET函数是易失的:这意味着,只要你的工作簿中有任何更改,就会重新计算 OFFSET公式。
,因为用户界面可以在进行其它工作的同时一直处于活动状态; (2)多线程可以提高CPU的利用率,因为当一个线程处于等待状态的时候,CPU会去执行另外的线程; (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务...二、易失域 对于类中的成员使用volatile修饰符,它就会被声明为易失域。...对于易失域,在多线程环境中,每个线程中对此域的读取(易失读取,volatile read)和写入(易失写入,volatile write)操作都会观察其他线程中的操作,并进行操作的顺序执行,这样就保持易失域使用的一致性了...(请参考:认识全面的null) 2.lock不能锁定string类型,虽然它也是引用类型的。...因为字符串类型被CLR“暂留” 3.lock锁定的对象是一个程序块的内存边界 4.值类型不能被lock,因为前文标红字的“对象被释放”,值类型不是引用类型的 5.lock就避免锁定public 类型或不受程序控制的对象
显然,诸如下面的非数组公式: =INDIRECT(ADDRESS(1,1)) 解析成: =INDIRECT("$A$1") 结果为: 9.2 因此,我们可能希望使用数组公式将这种公式构造应用于多个单元格...:A5))+1))),2)) =IMSUM(COMPLEX(INDEX(A1:A5,N(IF(1,ROW(A1:A5)-MIN(ROW(A1:A5))+1))),1)) 实际上,因为INDEX函数是非易失性的...在这里,我们尝试与第一个示例中的INDIRECT/ADDRESS函数组合类似的方式使用此函数,即指定参数info_type为“address”来获得要传递给SUM的一组单元格引用(当然是在通过INDIRECT...完全不是我们期望的数组公式,也不确定CELL函数拒绝接受生成数组输入的原因。不知道有没有人知道?...值得记住的是,无论强制性需求的程度如何,无论它是否必然涉及一个、两个甚至三个额外的函数,这些强制性函数很大程度上来自于INDEX、N(或T)和OFFSET函数的组合,并使用一些特定的语法。
非易失性存储设备比DRAM有几个数量级的读写延迟。数据库以块为单位访问非易失设备,而DRAM以字节访问。顺序和随机写性能差距比较大。...系统重新启动后,分配但未持久化的slot将转回未分配状态。 NVM-InP引擎将WAL作为非易失链表存储。它使用原子写的方式将新条目附加到链表中。...它不会将MemTable作为SSTable刷新到文件系统,而只是将MemTable标记为不可变,并启动一个新的MemTable。...更改包括插入操作的元组内容,更新操作的更新字段和删除操作的逻辑删除标记。当MemTable的大小超过阈值时,NVM-Log引擎将其标记为不可变(immutable),并启动一个新的MemTable。...与NVM-InP引擎类似,这个新引擎还是将WAL作为非易失性链表条目存储。当事务插入元组时,引擎首先将元组刷新到NVM,并将非易失性元组指针记录在WAL条目中。
第二步:业务线程:将A -> B 的引用失效; 第三步:GC 线程: 因为B自身已经扫描完成,所以感知不到 A -> B 的引用失效,待把C、D标记完成后,将B设置为黑色。...吗有两种方案解决漏标:1、黑色对象 -> 白色对象建立链接时,通过写屏障将黑色对象标记为灰色,灰色对象需要重新标记,这种方法叫 Incremental-Update(增量更新);2、灰色对象 -> 白色对象引用断开...:A -> D 新建了引用关系,利用写屏障将A重新标记为灰色 (注意:这里的写屏障,并不是指内存屏障,是指类似切面编程的理念,不改变原有逻辑的情况下,将A标记为灰色)3、GC线程:...,利用写屏障将 B -> D 的引用原始快照记录下来3、在重新标记阶段,将B -> D 的引用原始快照拿出来,重新扫描D是否被引用。...,只需要遍历当前Region,和当前Region的Rset指向的那些Region区域,即可知道有没有引用指向它,时间开销极小。
非易失性数据库系统存储与恢复方法 摘要 非易失性内存的出现从根本上改变了数据库管理系统的内存和持久存储的架构。这些新型NVM设备具有堪比DRAM的速度,但是写到NVM设备后这些数据就具备了持久性。...系统重新启动后,分配但未持久化的slot将转回未分配状态。 NVM-InP引擎将WAL作为非易失链表存储。它使用原子写的方式将新条目附加到链表中。...它不会将MemTable作为SSTable刷新到文件系统,而只是将MemTable标记为不可变,并启动一个新的MemTable。...更改包括插入操作的元组内容,更新操作的更新字段和删除操作的逻辑删除标记。当MemTable的大小超过阈值时,NVM-Log引擎将其标记为不可变(immutable),并启动一个新的MemTable。...与NVM-InP引擎类似,这个新引擎还是将WAL作为非易失性链表条目存储。当事务插入元组时,引擎首先将元组刷新到NVM,并将非易失性元组指针记录在WAL条目中。
sub过程中的参数传递 自定义函数,function过程 声明一个自定义函数 使用自己定义的函数 function example 设置函数为易失性函数,让自定义函数也能重复计算 操作对象 VBA中常用的对象...c.Interior.Color Then count_color = 1 + count_color End If Next rng End Function 设置函数为易失性函数...如果想让工作表重新计算后,自定义的函数也能随之重新计算,就应该讲自定义函数定义为易失性函数。...要将一个自定义函数定义为易失性函数,只需要在function过程开始时添加下面一行代码: application.voliatile true example Public Function fun()...worksheets.count range对象 用range属性引用单元格 引用单个固定的单元格区域:这种方法实际上就是通过单元格地址来引用单元格 引用多个不连续的单元格:将range属性的参数设置为一个用逗号分成多个单元格地址组成的字符串
下面是有关该版本更新内容的摘要,此版本中最显著的变化包括:兼容性提示升级至该版本需要您使用的 Go 语言为 1.18 或更高版本,以升级依赖库 golang.org/x/net将数据类型 HeaderFooterOptions...,将保留表格区域全部单元格的值支持读取带有分数数字格式的单元格删除图片时,如果图片仅有一处引用,将同时从工作簿内部删除对应的图片文件,以减少生成工作簿的体积并消除由此产生的潜在安全风险支持为批注框设置自定义宽度和高度插入或删除行列时...,支持更新条件格式、数据验证、自定义名称、图形对象、单元格公式、易失性函数中的单元格坐标引用新增 6 项新增条件格式类型:“特定文本”、“空值”、“无空值”、“错误”、“无错误”和“发生日期”公式计算引擎支持计算带有多重负号的单元格公式复制行时支持复制条件格式与数据验证设置行高度函数...tabRatio 属性值工作簿部件的兼容性提升了读取带有空的自定义数字格式单元格的兼容性提升了与不支持默认主题部件命名空间电子表格预览程序的兼容性提升了单元格批注形状与 KingSoft WPS™ Office...的兼容性保存工作簿时对内部部件进行排序,以确保在不改变工作簿内容时生成的文件具有一致的哈希值问题修复添加对公式函数 MID 和 MIDB 中 num_chars 参数的检查,以防止出现负数导致的 panic
在单片机开发中,往往需要实现数据的非易失存储。...所谓非易失存储,就是数据改写后在掉电后仍然能保持。哪些是非易失存储介质呢?比如EEPROM,FLASH等都属于非易失存储介质。 比如一个产品里面有很多各种各样的参数,且分布在各个子系统文件中。...ki; float kd; float T; }T_PID; T_PID pidParas; 面对这样一个需求,要实现非易失存储,我在将底层的EEPROM/FLASH读写函数实现的基础上,...那么更为理想的方式是什么呢?设计一个模块专门负责存储非易失数据。...4.png 总结一下 这篇文章引入了一些编程思想,对于单片机/嵌入式进阶编程比较有用: 利用void *指针,将业务数据与底层存储实现了抽象解耦 利用分层抽象实现了代码具有良好的可移植性 利用函数指针实现了
图1 解决方案 1.提取数据类型 CELL函数从数据的第一行提取数据类型。 图2 由于CELL函数似乎不能以数组公式形式工作,因此必须逐个单元格输入公式。...2.统计 在单元格C4中使用数组来统计以“C”开头的数据类型: =COUNTIF($A$1:$T$1,C5&"*") 图3 3.计数 使用动态数组函数SEQUENCE在单元格B6中创建了一个计数器:...4.列标题列表 B6#中的#用于将公式沿计数器向下溢出。无需手动向下拖动公式(它会自动扩展)。 =INDEX(‘blockbuster-top_ten_movies_per_’!...CELL函数和OFFSET函数都是易失性函数。 =OFFSET($C$6,0,0,$C$4,1) 图4 至此,问题解决。 注意,如果改变了数据表中的列的数据类型,则需要按F9键重新计算。...syslcid=1033&uilcid=1033&appver=zxl900&helpid=xlmain11.chm60173&ui=en-us&rs=en-us&ad=us 欢迎在下面留言,完善本文内容
在传统的垃圾收集器中,STW的时间是无法预测的,有没有一种办法,能够首先定义一个停顿时间,然后反向推算收集内容呢?就像是领导在年初制定KPI一样,分配的任务多就多干些,分配的任务少就少干点。...G1将堆内存“化整为零”,将堆内存划分成多个大小相等独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。...白色:未被扫描的对象,如果扫描完所有对象之后,最终为白色的为不可达对象,也就是垃圾对象。 漏标问题 假设此时,对象A及其引用的对象都已经被扫描完,那么对象A将会被标记为黑色。...用户线程将对象B和对象C之间的引用断开,将对象A指向对象C,此时对象C会被当成垃圾对象,会产生漏标问题,因为对象A不会再被扫描。 漏标问题在CMS和G1收集器中有着不同的解决方案。...两种漏标解决方案的对比: SATB算法关注的是引用的删除(B->C的引用)。 Incremental Update算法关注的是引用的增加(A->C 的引用),需要重新扫描,效率低。
领取专属 10元无门槛券
手把手带您无忧上云