怎么工作表中的数据老是自已在变?——这是易失性函数在作怪

怎么工作表中的数据老是自已在变?——这是易失性函数在作怪!请仔细看下图1中的工作表。

图1

当我们在工作表单元格中输入数据时,单元格B3和B5中的值都会自动发生变化。首先声明,我没有在工作表事件中编写VBA代码来实现这个自动变化的功能,而是在单元格B3中输入了公式:

=NOW()

在单元格B5中输入了公式:

=RAND()

那么,它们为什么会自动变化呢?

有时候,我们打开一个工作簿,并没有作任何修改或输入,在关闭该工作簿时,Excel却提示要保存修改,这又是为什么呢?

其实,这都是Excel的“易失性”函数在作怪。

在Excel中,存在着一些函数,每当Excel需要计算(包括重新计算、打开工作表或编辑工作表中的单元格)工作表的任意部分时,包含着这些函数的单元格也会同时进行重新计算,其值也会发生变化,这些函数称为“易失性函数”。

Excel的易失性函数有哪些?

一些Excel函数明显是易失性函数,包括:RAND函数、NOW函数、TODAY函数。

一些Excel函数看不出是易失性函数,包括:OFFSET函数、CELL函数、INDIRECT函数、INFO函数。

一些函数在有些Excel版本中是易失的但在另外的Excel版本中不是,例如在Excel 97中INDEX函数变成了非易失性函数。

一些函数在Microsoft的文档中描述是易失的,但在实际测试时似乎是非易失的,包括:INDEX函数、ROWS函数、COLUMNS函数、AREAS函数和CELL函数。

SUMIF的一个特殊语法在Excel 2002及后续版本中是易失的:

=SUMIF(A1:A5,”>0”,B1)是易失的,而=SUMIF(A1:A5,”>0”,B1:B5)是非易失的。

如何使一个用户自定义函数(UDF)成为易失的?

在创建用户自定义函数时,在第一行编写语句:

Application.Volatile True

可以让自定义函数为易失性函数。这样,一旦重新计算工作表,都会强制计算这个函数。

记住,该语句必须在用户自定义函数的第一行。

例如,下面的自定义函数模仿Excel内置的RAND函数:

Function InitateRand()

Application.Volatile True

InitateRand = Rnd()

End Function

在工作表单元格中输入公式:

=InitateRand()

将与RAND函数一样,在每次工作表重新计算时其值都会发生变化。

将’Application.Volatile(False)’应用于易失性函数能够使其成为不易失的吗?

无论什么情形,都不能将Application.Volatile(False)应用于内置的Excel函数,除非重新编写一个与内置函数作用相同的用户自定函数(UDF)并应用了Application.Volatile(False)语句。

office办公软件入门基础教程 » 怎么工作表中的数据老是自已在变?——这是易失性函数在作怪

本文链接:【怎么工作表中的数据老是自已在变?——这是易失性函数在作怪】https://www.officeapi.cn/87911.html

OFFICE,天天学一点,进步多一点

联系我们