随着在会计等商务管理工作中大量地使用电子表格软件来处理事务,有研究人员进行了一些关于电子表格错误的研究。这些研究发现:一般情况下,大约百分之20到40的电子表格包含某些类型的错误。工作中使用包含有错误的工作表是非常危险的,尤其是在会计工作中,如果将电子表格作为公司的账本,这些错误会更危险。本文以电子表格中非常常见的一类错误――公式中返回的错误值的讨论为基础,分析了电子表格中出现的错误类别。最后对如何避免与审计这些错误提出了相应的解决办法。
一、电子表格公式中返回的常见错误值
电子表格中有一类错误的发生,在工作表中会自动地返回一些电子表格内部的错误值以提示该处发生了某种错误。了解这些错误,并熟悉产生这些错误的原因,对预防电子表格中可能的错误发生有很大帮助。同时,对电子表格的审计人员也提供了相应的审查线索。以Microsoft Excel为例,在工作表中返回的错误值主要有:
1.#DIV/0! 当数字被零除时,显示此错误。可能的原因是输入的公式中直接被零除。或引用空白单元格或包含了零的单元格作为除数。
2.##### 当列不够宽,或使用了负的日期、负的时间时,出现此错误。
3.#N/A 当引用单元格无法得到有效值时,显示#N/A错误。一般情况显示#N/A错误的情况主要有:查找函数没有发现匹配的对象;某处使用了迭代计算的统计函数,如GAMMAINV 或 BETAINV等,函数经过若干次迭代后,仍未收敛。有时,在单元格中输入#N/A(或函数NA())还有特殊的含义:单元格中输入#N/A表示单元格中没有数据,当其他单元格引用这些单元格时,不进行数值计算;另外,在创建一个折线图时,缺少的数据以#N/A表示,折线图通过内插而画出;如果仅以空单元格表示,图表中则以一个缺口表示缺少的数据。
4.#NULL! 当一个公式试图将两个不相交的范围进行交叉运算时,显示#NULL!错误。在Excel的工作表中可使用的引用运算符包括:(1)冒号(:)表示区域运算符,通过区域运算符产生对包括在两个引用之间的所有单元格的引用。如SUM(A1:A10)是对A1到A10的所有单元格求合;(2)逗号(,)表示联合运算符,将多个引用合并为一个引用。如SUM(A1:A10,B1:C3)是对这两块区域中的所有单元格求和;(3)空格( )表示交叉运算符,产生对两个引用交叉的单元格的引用。当二个引用或范围没有交叉单元格,但要进行交叉运算时,就显示#NULL!错误。或者使用了不适当的运算符时,也出现这种错误。如,本是区域运算符的,却错成交叉运算符(把冒号给漏掉了)。
5.#NUM! 当公式或函数中使用无效数字值时,出现这种错误。在出现下列情况时,发生此错误:(1)部分使用了迭代计算的工作表函数,如 IRR 或 RATE,在函数无法得到有效的结果时,显示#NUM错误。此时或为工作表函数使用不同的初始值或更改 Microsoft Excel 迭代公式的次数来解决错误。(2)输入的公式产生的数字太大或太小,无法在Microsoft Excel中表示。Excel支持的数值范围是1E-307到1E+307。如在单元格中输入=1/(10^310),则显示此错误。(3)当公式或函数中输入了无效数字时,显示此错误。如不少统计函数要使用到概率参数,如果该参数大于1或小于0时显示此错误。如果有些参数要求为非负,当参数是负数时也显示此错误。(4)Microsoft帮助中提示,在需要数字参数的函数中使用了无法接受的参数时,也显示此错误。但当在函数中输入无法接受的参数时,Excel不予接受,出现警告信息,而不是显示错误值。
6.#REF 当单元格引用无效时,显示#REF错误。在出现下列情况时,发生此错误:(1)删除了公式引用的单元格。如A2中=A1-1,若A1被删除了,则显示此错误;(2)当被剪切的一个范围粘贴到一个被引用的单元格时,显示此错误。如上例,若A5被剪切,粘贴到A1单元格,或将A5移动到A1单元格时,显示此错误;(3)如上例,若将A2单元格中的公式移到A1单元格中,A1单元格显示此错误。由于在第一行的上面已没有单元格;(4)当公式的引用指向的程序未被打开,显示此错误。
7.#VALUE 当使用参数或操作数的类型不配时,显示此错误。在出现下列情况时,发生此错误:(1)在公式或函数中使用了不正确的数据类型。如需要数字的地方,却输入了文本。(2)当输入数组公式时,忘记按Ctrl+Shift+Enter,只按了Enter键。(3)为需要单个值(而不是区域)的运算符或函数提供了区域。(4)在某个引用矩阵的工作表函数中引用了无效的矩阵;确认矩阵的维数对矩阵参数是正确的。
8.#NAME?当出现未识别的文本时,显示该错误。一般在出现下列情况时,发生此错误:(1)定义或内部的名称拼写错误造成使用了不存在的名称。(2)使用了一个没有加载的工作表函数。(3)在公式中输入文本时没有使用双引号。(4)区域引用时不小心漏掉了冒号。(5)引用另一张工作表时,漏掉了单引号。(6)当在公式中使用标志,却没有允许使用标志。允许使用标志,应在“工具”菜单上,单击“选项”,再单击“重新计算”选项卡。在“工作簿选项”下,选中“接受公式标志”复选框。公式标志是指在创建需要引用表中数据的公式时,可以使用工作表中的列标与行标通过交叉运算符(空格)来引用数据。
二、电子表格中常发生错误及其分析
通过对各种错误值的了解,用户在熟悉了上述各种错误值含义后,可以较快地排除错误、解决问题。直接在表格中显示错误值,这是电子表格软件处理错误的一种基本方式。这种方式是通过电子表格软件系统内部的设置来反映,但是在某些情况下,可能工作表中存在错误,但电子表格却没有任何提示。这时,如果我们能对电子表格出现的错误进行一种归类,对不同种类的错误进行分析,会有助于预防与审计这些错误。一般情况下,在电子表格中常发生的错误有以下几种:
(一)根据电子表格是否对错误会做出反应来分析。
1.电子表格返回错误值的错误。文章的第一部分对此作了详细地讨论。当用户在遇到这些错误时,应根据返回的不同错误值做出相应的修改和处理。对一些不可修改或不可避免的错误值,用户可能要作一些特殊的处理。
2.电子表格软件提示警告对话框的错误。这种错误出现在用户向单元格中进行数据或公式输入的阶段,电子表格软件会根据系统设置马上就对此类错误做出反应:通过跳出警告对话框,提示用户出现错误。并且要求修改错误后再进入下一阶段的数据处理或操作。在某些情况下,电子表格软件可能会提供建议性的修改意见,但并没有保证修改意见的正确性。
3.电子表格软件没有任何提示的错误。这类错误是最具隐蔽性,也是最危险的。用户在完成工作表时并不知道工作表中是否包含了错误。要发现此类错误,一种方法只能通过用户的不断测试来实现。用户可以借鉴软件工程中软件测试的方法,采用一些常规的、极端的数据来进行测试等。但某些错误可能采用这种测试方法无效。如在Microsoft Excel中输入数组时,要同时按下Ctrl+Shift+Enter键。但如果用户没有这样做,则Excel不会把输入当成数组。要发现这种错误,难度很大。在文章的最后部分将讨论如何来避免这些错误。
(二)根据错误的性质来分析。
1.系统错误。系统错误的发生有二种情况:一种是电子表格系统本身发生的错误。这种错误可能是电子表格的应用程序被破坏,或其运行的工作要求与环境没有满足或被破坏。这时可能要迫使用户重新安装电子表格软件。另外一种情况是电子表格的工作簿或工作表发生错误。如文件的存贮媒介被物理损坏或被病毒、黑客恶意损坏。为避免这类错误的发生要求用户在加强系统安全保护的同时,要经常地做好数据的安全与备份工作。
2.语法错误。任何一个应用程序的正常运行都要遵循系统本身设置的语法限制。出现这种错误是由于在工作表中出现了违反电子表格软件内部语法要求的情况。常见的语法错误有函数没有正确地使用:缺少参数、参数的类型不对、函数名称拼写错了;公式中的括号不匹配。一般情况,应用程序本身都会辨别和纠正这类错误。以Microsoft Excel为例,在大多数情况下,如果在单元格中包含一个语法错误,Excel会有所提示,这样我们很容易知道。如Excel就不允许输入不匹配的括号,而其它的语法错误,通常会引起在工作表的单元格中返回一个内部错误值。
3.逻辑错误。当工作表中包含逻辑错误时一般不会有任何提示,只是可能会导致输出一个不正确的结果。常见的逻辑错误有:
(1)不完全计算错误。如在使用Solver求解复杂模型时,由于受迭代次数或计算时间限制,没有完全计算。此时,Solver会得出一个不正确的解。同样,工作表中的公式也会常发生没有完全计算而得出不正确结果的错误。在Excel中,可使用Ctrl+Alt+F9来保证公式完成计算,但这一快捷键对Solver无效。
(2)循环引用错误。当一个单元格的公式直接或间接地引用了自身单元格时,就出现了循环引用。一般可以设置电子表格的内部设置也要求电子表格软件是否提示反映循环引用错误存在。大多数情况下,循环引用表示工作表存在问题。但在少数情况下,我们可以利用循环引用实现电子表格好像不能实现的功能。
(3)公式单元格被数值所覆盖错误。一个本应包含公式的单元格被一个数值所覆盖,这在工作表中是很容易发生的。这类错误会对其他公式产生很大的影响。
(4)不正确引用的错误。不正确引用,在工作表中也经常发生。一个本应绝对引用的单元格,由于在复制时没有采用绝对引用;一个本应引用R1C2(第一行第一列)单元格,却引用了R2C1(第二行第一列);在公式中可能包含了不想计算的单元格等等。
(5)运算符优先级错误。这是在单元格中输入公式时经常会发生的错误,为避免这种错误的发生,应适当地使用括号。
三、如何避免与审计电子表格错误
对电子表格中常发生错误的了解和分析是我们避免错误发生的前提。同时也有助于对电子表格的审计和改进。针对以上电子表格可能发生的错误,在设计电子表格时,应遵循以下一些原则:
1. 合理地布局数据和数据说明。一般数据说明在左,数据在右;数据说明在上,数据在下;有待输入的数据与模型的前提假设分开存放;采用不同的颜色、阴影或边框线;必要时可采用单元格注释;将一些特定的模型的布局与对应数学模型的布局类似等等。这样可提高工作表的可读性、可靠性、可审计性,使模型也更易于使用和维护。
2.尽可能地使用可以被复制的公式。使用被复制的公式是减少错误、提高工作效率、增加工作表可读性的一种很好办法。但有时,使用被复制的公式也会增加麻烦:如果被复制公式有除法运算,当复制后的公式中除数所在的单元格为空时,可能会出现#DIV/0!错误;复制公式最关键的是要安排好单元格的绝对引用、相对引用和半相对引用,如果将没有安排好是何种引用的公式复制,可能会产生更为危险的结果,这时甚至不会有错误的提示,而仅是Excel没有得出正确的结果。
3.灵活地使用IF函数。Excel提供的IF函数可以通过在公式增加一系列的条件判断来避免一些可以预见的错误。但是,在公式中过多地使用IF函数有时会减少工作表的可读性。
4.随着电子表格工作表的逐渐加大和复杂化,很难使工作表没有一点错误。为了尽可能地减少工作表中的错误,对复杂工作表的设计,应遵循开发复杂系统的工程化管理的方法,采用结构化的设计思路。
同时,当审计人员在审计电子表格时,在熟悉电子表格工作环境的前提下,至少可以有以下二种选择:
1.利用电子表格软件自身的审计功能。一般的电子表格软件除了对电子表格所发生的错误会作出一些反映或提示外,还提供了专门的工具或特别的功能来帮助审计人员审查工作表。以Microsoft Excel为例。Excel提供了专门的审核工具,来帮助审计人员跟踪公式间的关系;Excel同时还有特别的定位功能,可能帮助审计人员查找到特殊类型的单元格。如查找所有存放公式的单元格。另外,在高版本的Excel XP中还可以对Excel进行内部设置,可让Excel来帮助审计人员进行工作表的后台检查。
2.利用第三方的审核工具。一些有名的审核工具包括Power Utility Pak、Spreadsheet Detective、Excel Auditor等。这些审核工具可以向软件开发商购买,也可以在部分网站上下载其免费评估版。以Power Utility Pak为例,该工具可以产生工作簿的总结报告、工作簿的链接报告、比较工作表、公式报告等。
当然,对一些要经常审计电子表格工作簿的会计师事务所或审计人员,应该与软件商合作开发专门的电子表格审计软件。
四、本文的注解与说明
1.本文在讨论如何预防和审计电子表格中存在的错误时,以Excel为操作环境进行讨论和分析。
2.本文讨论的错误是电子表格软件工作表中发生的错误,不涉及电子表格软件内部的编程语言如Microsoft Excel内置的Visual Basic for Application(VBA),也不涉及用编程语言编制的系统中的程序错误。要发现和修改这些程序中的错误,可能要借助专门的程序调试工具。同时,也不涉及一个设计好的电子表格工作簿文件或电子表格模型交付使用后,用户在使用过程中的由于误操作等而引发的错误。但在电子表格模型的设计阶段,要为避免或减少用户在使用过程的错误操作而精心设计电子表格模型。 (作者单位:上海财经大学会计学院)
来源:上海财经大学会计学院