1.1.3 函数的参数
函数参数就是我们写函数名称后圆括号内的常量值、变量、表达式或函数。它可以是数字、文本、逻辑值(如TRUE或FALSE)、数组、错误值(如#REF!)或单元格引用(如A1:B1)。指定的参数都必须为有效参数值。一个函数可以使用一个或多个参数,参数与参数之间使用半角逗号进行分隔。参数的类型及其所在的位置必须满足相关函数语法的要求,否则将返回错误信息。参数用于传递各种值,供函数处理、分析,并产生用户所期望的结果。
函数的参数有如下几种成员。
1.常量
常量,即不进行计算的值,常量不会发生变化。例如,数字210,以及文本“每季度收入”都是常量。表达式及表达式产生的值都不是常量。如果公式引用的是相同工作表中的数据,那么就可以使用标志;如果想表示另一张工作表上的区域,那么请使用名称。
常量是不随时间变化的变量和信息,也可以是表示某一数值的字符或字符串,常被用来标识、测量和比较。在Excel中,常量可直接输入到单元格或公式中的数字或文本,或由Excel定义的名称所代表的数字或文本值,例如,数字“3.14”、文本“利率”、日期“2007-8-8”都是常量。
在Excel单元格中,如果看到有数值或文本是由公式计算得出的结果,则不是常量。因为公式的参数是可变化的,所以这种看似“常量”的结果也会随参数的变化而变化。如图1.3所示,“1968-8-18”,“2007-3-21”是日期型常量,作为函数DATEDIF()的参数。但作为C1单元格的计算结果,“38”就不是常量了,因为用户可以通过改变日期型常量来改变DATEDIF()函数的运算结果。
2.变量
顾名思义,变量就是会变化的量。Excel函数使用的参数可以是变量,但并不是说它飘忽不定,琢磨不透,而是根据用户的意思确定自己是什么类型的值,对整个函数的运算起到什么作用。说明白一点,它就像人的口袋一样,当用户需要的时候用于“装载”东西,在Excel中它是“装载”一定的数值或字符,向函数传递“值”的信息,至于得到什么结果,那是由函数来决定的。如图1.4所示,TODAY()函数用于返回系统当前日期的序列号,显示的是执行公式时的系统日期时间,它作为DATEDIF()函数的一个变量参数,参与运算,得出C1单元格的值。
图1.3 日期常量
图1.4 日期型函数作为变量
3.数组
数组是一组具有相同类型和名称的变量集合,它包含了多个元素的数据结构。
Excel中的数组有常量和区域两种类型的数组。在数组内容各列的数值要用逗号“,”隔开,各行的数值要用分号“;”隔开。如常量数组{1,2;2,3},表示的是一个2 行2 列的常量数组。如果执行公式“=SUM({1,2;2,3})”计算,其结果为8。
区域数组是一个矩形的单元格区域,该区域中的单元格公用一个公式。如图1.5所示,G5单元格公式“=SUM(1/COUNTIF(C2:H3,C2:H3))”,该公式作为数组公式使用时,它所引用的矩形单元格区域“C2:H3,C2:H3”就是一个区域数组。公式编辑栏中抹黑部分,是在选定函数“COUNTIF(C2:H3,C2:H3)”按下F9键运算产生的一个2行6列的数组。按Esc键返回公式编辑状态,让光标处在编辑栏中,同时按下“Ctrl+Shift+Enter”组合键,启动数组公式运算,便可利用数组的方式求出单元格区域“C2:H3”不重复的数字个数。
图1.5 区域数组
4.逻辑值
逻辑值是比较特殊的一类参数,它只有TRUE(真)或FALSE(假)两种类型。如图1.6所示,FALSE(假)作为函数VLOOKUP()的参数出现,其意义是控制该函数以E2单元格的值“MP5”作为样本,以B2:C4单元格区域作为数据源进行精确匹配查找“MP5”的拥有者;如果这个逻辑值为TRUE(真),返回的就是近似匹配查找,其意义是不一样的。
图1.6 FALSE(假)作为参数
另外,逻辑值在公式中的出现还会以表达式的方式出现,如C1单元格的公式是“=IF(A1>85, "优秀","努力啊")”,“A1>85”就是一个可以返回TRUE(真)或FALSE(假)两种结果的参数。当“A1>85”时,即公式认为是TRUE(真),C1单元格中的值就会显示“优秀”,否则就是FALSE(假)值,C1单元格就会显示“努力啊”。
5.单元格引用
Excel函数中最常见的参数就是单元格引用。
引用的作用在于标识工作表上的单元格或单元格区域,并指明公式中所使用的数据的位置。通过引用,可以在公式中使用工作表不同部分的数据,或者在多个公式中使用同一个单元格的数值,还可以引用同一个工作簿中不同工作表上的单元格和其他工作簿中的数据。引用不同工作簿中的单元格称为链接。
Excel为方便用户,相邻单元格的公式可以采用拖曳方式进行复制。为适应公式所在单元格的位置发生变化而自动改变单元格引用地址的变化情况,函数的引用分为相对引用、绝对引用和混合引用三种类型。
(1)相对引用。
在公式中,基于包含公式的单元格与被引用的单元格之间的相对位置的单元格地址。如果复制公式,相对引用将自动调整。相对引用采用A1样式。
如图1.7所示,E2单元格的公式“=SUM(B2:D2)”是对“B2:D2”区域求和。当对E2单元格的填充柄单击往下拖拉时,E3的公式会自动变为“=SUM(B3:D3)”、E4的公式会自动变为“=SUM(B4:D4)”。若公式沿E列继续向下复制,“行标”每增加1行,公式中的行标也自动加1。
相对引用的好处就是可以在复制中智能变化,以减少用户的录入量,并降低出错的概率。
(2)绝对引用。
公式中单元格的精确地址,与包含公式的单元格的位置无关。绝对引用采用的形式为$A$1。
如上述公式改为“=SUM($B$2:$D$2)”,即在“B2:D2”区域标记加上符号“$”,这时再拖曳复制公式,就会发现无论拖到哪里,SUM()函数引用的区域将不再发生变化,其计算结果均是“321”,其引用的位置始终是“$B$2:$D$2”区域。
绝对引用的好处就是防止用户在拖拉公式时,不改变用户需要固定使用某一单元格的值。如图1.8所示,使用绝对引用的“=SUM($B$2:$D$2)”公式,往下拖拉的结果公式总是恒定不变的。
图1.7 相对引用会适时改变适应新的单元格
图1.8 恒定不变的绝对引用公式
(3)混合引用。
混合引用具有绝对列和相对行,或是绝对行和相对列。绝对引用列采用$A1、$B1等形式,绝对引用行采用A$1、B$1等形式。如果公式所在单元格的位置改变,则相对引用改变,而绝对引用不变。如果多行或多列地复制公式,相对引用会自动调整,而绝对引用不做调整。
混合引用有$A1“绝对列和相对行”,或是A$1“绝对行和相对列”两种形式。前者在进行公式拖拉复制时,列不变但行号可变;而后者在公式进行拖拉复制时,会根据用户进行横向拖拉复制,这时行号不变,列标相应地发生改变。正是上述固定、相应改变这两种引用状态,可以让用户省掉花大量的时间去反复重写仅行号列标顺序相差的公式。
请读者打开“配套光盘\第1 章\xls\通用晚修补课统计表.xls”工作簿,单击“打印表”工作表中的A6 单元格,如图1.9所示,在公式编辑栏中可以看到公式“=OFFSET(总表!A$3,(ROW()-3+28*($D$38-1)),)”,在这个公式中有行列绝对引用$D$38,相对列绝对行引用A$3。正是这两种引用,让用户可以将单元格A6拖拉复制到A6:AC33区域,只产生29个不同的公式,但配合ROW()函数和OFFSET()函数使用,可产生共计812个各不相同的结果。
如果要分析同一工作簿中多张工作表上的相同单元格或单元格区域中的数据,请使用三维引用。三维引用包含单元格或区域引用,前面加上工作表名称的范围。Excel使用存储在引用开始名和结束名之间的任何工作表。例如,=SUM(Sheet2:Sheet13!B5)将计算包含在B5单元格内所有值的和,单元格取值范围是从工作表2到工作表13。如果是不同的单张的工作表中不同的单元格求和,可写成=SUM(Sheet2!B5,Sheet3!B255)。
图1.9 利用相对、绝对引用拖拉复制新的公式
三维引用中不仅要带上工作表的名称(Sheet2),还要在工作表名称的后面加上半角的感叹号“!”(Sheet2!),再接单元格或区域引用(Sheet2!B5)。
如果引用的数据来源于另一个处在打开状态的工作簿(数据源),则还需要在工作表名称前面加上工作簿的名称,如[Book1.xls] Sheet1!$A$1;若数据源工作簿关闭了,则会自动在前面加上数据源工作簿文件地址,如D:\My Documents\[Book1.xls] Sheet1'!$A$1。如图1.10所示,当前工作簿引用了已关闭的[Book1.xls] Sheet1'!$A$1单元格内容,所以工作簿名称前加上了路径D:\My Documents\。
图1.10 跨工作簿的单元格引用
不过三维引用要受到较多的限制,如三维引用不能用于数组公式中,不能与交叉引用运算符(空格)一起使用,也不能用在使用了绝对交集的公式中。
上述的引用样式为A1引用样式。实际引用存在的样式有两种,还有一种是R1C1引用样式。下面简述两种引用的格式。
(1)A1引用样式。
默认情况下,Excel 2003使用A1引用样式,此样式引用字母标识列(从A~IV,共256列),引用数字标识行(从1~65536)。这些字母和数字称为行号和列标。若要引用某个单元格,请输入列标和行号。例如,B2引用列B和行2交叉处的单元格。如对单元格引用一点概念都没有的用户,可研习一下如图1.11所示的单元格的引用和使用方法。
(2)R1C1引用样式。
也可以使用同时统计工作表上行和列的引用样式。R1C1引用样式对于计算位于宏内的行和列很有用。在R1C1样式中,Excel指出了行号在R后,而列号在C后的单元格的位置。如图1.12所示,请读者了解R1C1引用样式的具体意义。
图1.11 单元格的引用与使用方法
图1.12 R1C1引用的含义
一般来讲,用户很少采用这种样式。当你录制宏时,Excel将使用R1C1引用样式录制命令。例如,如果要录制这样的宏,当单击“自动求和”按钮时该宏插入将某区域中的单元格求和的公式:Excel将使用R1C1引用样式,而不是A1引用样式来录制公式。所以,万一要研究你录制的宏,要注意单元格的引用样式。
6.嵌套函数
在某些情况下,你可能需要将某函数作为另一函数的参数使用。如图1.13所示,公式使用了嵌套的AVERAGE()函数并将结果与值50进行了比较,如果值大于50,就执行求和运算,否则就将值置为0。(1)有效的返回值。
当嵌套函数作为参数使用时,它返回的数值类型必须与参数使用的数值类型相同。例如,如果参数返回一个TRUE或FALSE值,那么嵌套函数也必须返回一个TRUE或FALSE值。否则,Excel将显示#VALUE!错误值。
图1.13 嵌套函数作为返回值
(2)嵌套级别限制。
公式可包含多达七级的嵌套函数。当函数B在函数A中用做参数时,函数B则为第二级函数。如图1.13所示,AVERAGE()函数和SUM()函数都是第二级函数,因为它们都是IF()函数的参数。若AVERAGE()函数中有嵌套的函数则为第三级函数,依次类推。
7.名称和标志
可以在工作表中使用列标志和行标志引用这些行和列中的单元格,还可创建描述名称来代表单元格、单元格区域、公式或常量值。如果公式引用的是相同工作表中的数据,那么就可以使用标志;如果你想表示另一张工作表上的区域,那么请使用名称。
(1)使用已定义名称来表示单元格、常量或公式。
公式中的定义名称使人们更容易理解公式的含义。例如,公式=SUM(一季度销售额)要比公式=SUM(C20:C30)更容易理解。
名称的定义方法:单击菜单【插入】→【名称】→【定义】,可打开“定义名称”对话框,如图1.14所示,在“在当前工作簿中的名称”下面的文本框中输入名称,如“一季度销售额”,在“引用位置”下面的文本框中输入绝对引用地址,如“=Sheet3!$E$6”,然后单击“添加”按钮即可完成名称的定义。
上面定义的名称是全局名称,全局名称可用于所有的工作表。例如,如果全局名称“银行利率”引用了工作簿中第一个工作表的区域G2:G7,则工作簿中的所有工作表都使用名称“银行利率”来引用第一个工作表中的区域G2:G7。
图1.14 “定义名称”对话框
工作表名称只能用于当前工作表,不为整个工作簿共享,这样可有效地防止不同的工作表有相同的名称冲突。其命名方式亦如图1.14所示,只是在名称前面加上工作表名称和一个感叹号“!”,如名称为“Sheet2!银行利率”。
名称也可以用来代表不会更改的(常量)公式和数值。例如,可使用名称“所得税1”代表工资收入大于5000元的税额系数(如20%~37%)。
也可以与另一个工作簿中的定义名称链接,或定义一个引用了其他工作簿中单元格的名称。例如,公式=SUM(Book1.xls!lili)表示“银行利率”工作簿中一个被命名为lili的区域。
注意
在默认状态下,名称使用绝对单元格引用。
命名规则如下。
● 允许使用的字符:名称的第一个字符必须是字母或下画线。名称中的字符可以是字母、数字、句号和下画线。
● 名称是否可为单元格引用:名称不能与单元格引用相同,例如,Z$100或R1C1。
● 是否可使用多个单词:可以使用多个单词,但名称中不能有空格。可以用下画线和句号做单词分隔符,例如,Sales_Tax或First.Quarter。
● 名称长度:名称最多可以包含255个字符。
注意
如果为区域定义的名称超过253个字符,那么将无法从“名称”框中选择。
● 名称是否区分大小写:名称可以包含大、小写字符。Microsoft Excel在名称中不区分大小写。例如,如果已经创建了名称Sales,接着又在同一工作簿中创建了名称SALES,则第二个名称将替换第一个。
(2)将已有行列标志作为名称使用。
在创建需要引用工作表中数据的公式时,可以使用工作表中的列标与行标来引用数据。例如,若要计算“产品”列数据的总和,请使用公式“=SUM(产品”。如图1.15所示,B3单元格的值是由公式“=SUM(产品)”得出来的。
或者,如果要引用“东部”分支机构“产品”的数量(即数值111),可以使用公式“=SUM(产品 东部)”。公式中“产品”和“东部”之间的空格为区域运算符。该运算符表示Excel将查找并返回行标为“东部”、列标为“产品”的单元格中的数值。如图1.16所示。
图1.15 使用标志
图1.16 使用行列标志求和
注意
默认情况下,Excel不会识别公式中的标志。若要在公式中使用标志,请单击【工具】菜单上的【选项】,再单击“重新计算”选项卡。在“工作簿选项”下,选中“接受公式标志”复选框。
层叠标志:如果工作表中使用行列标志,则可以使用它们来创建引用工作表中数据的公式。如果工作表中有层叠列标,即一个单元格标志的下面紧接着一个或多个标志。在公式中可以使用层叠标志来引用工作表中的数据。例如,标志“列标1”位于单元格A1,标志“列标2”位于单元格A2,公式=SUM(列标1列标2)将返回“列标1列标2”列中数据的汇总值。如图1.17所示,使用了层叠列标志来求和。
一般情况下,对于熟练的Excel用户来说,工作表计算越复杂,定义的名称较多;而采用列标志的用法较少,读者可不必在列标志上花费时间。
8.错误值
信息函数是使用错误值作为参数的,例如,“=ISERROR(A4)”检查“#N/A”错误值,如果存在,将返回TRUE。如图1.18所示,C6单元格含有公式“VLOOKUP($B6,行政!$B:$AR,2,FALSE)”,VLOOKUP因找不到“行政”工作表中的数据而出现报错信息#N/A,C6的错误值将影响《打印表》C列单元格的求和统计工作。如果采用信息函数进行处理,就可以解决这个问题,可将公式设为“IF(ISERROR(VLOOKUP($B6,行政!$B:$AR,2, FALSE)),0,VLOOKUP($B6,行政!$B:$AR,2,FALSE))”。利用ISERROR()函数侦测“VLOOKUP ($B6,行政!$B:$AR,2,FALSE)”计算是否有错误值#N/A。若有,则将C6单元格置为0,否则写入由VLOOKUP()函数计算得出的结果。
读者打开“配套光盘\第1章\xls\通用晚修补课统计表.xls”工作簿,删除《一A》工作表中B6单元格的人名“张1”,删除《总表》工作表中的C6单元格公式所用到的ISERROR()函数,则会出现错误值#N/A,《打印表》的小计和累计将会出错,读者可以验证此ISERROR()函数利用错误值工作的原理。
图1.17 使用层叠列标志求和
图1.18 VLOOKUP找不到数据出错