2.3 函数
函数处理数据的方式与公式处理数据的方式相同,函数通过引用参数接收数据,并返回结果。大多数情况下,返回的是计算结果,也可以返回文本、引用、逻辑值、数组,或者工作表的信息。本章中列出的函数都可以用于工作表或Excel宏表中。本章将介绍如何使用函数,然后介绍Excel中的一些工作表函数及其参数说明。
2.3.1 函数概述
前面已经看到,单元格中可以包括文本、公式或者函数。通过公式和函数可以在单元格中放置计算的值。公式可以进行加、减、乘、除运算,也可以包含函数。
Excel用预置的工作表函数进行数学、文本、逻辑的运算或者查找工作表的信息。与直接用公式进行计算相比,使用函数进行计算的速度更快。例如公式“=(A1+A2+A3+A4+A5+A6+A7+A8)/8”与使用函数公式“=AVERAGE(Al:A8)”是等价的。但是,使用函数速度更快,而且占用工具栏的空间更少,同时可以减少输入出错的机会,因此,应该尽量使用函数。
函数通过参数接收数据,输入的参数应该放在函数名之后,并且必须用括号括起来,各函数使用特定类型的参数,如数值、引用、文本或者逻辑值。函数中使用参数的方式与等式中使用变量的方式相同。
函数的语法以函数的名称开始,后面是左括号以及逗号隔开的参数和右括号。如果函数要以公式的形式出现,则在函数名前输入等号。
1.函数分类
Excel提供了大量的函数,这些函数按功能可以分为以下几种类型。
(1)数字和三角函数:可以处理简单和复杂的数学计算。
(2)文本函数:文本函数用于在公式中处理字符串。
(3)逻辑函数:使用逻辑函数可以进行真假值判断,或者进行符号检验。
(4)数据库函数:用于分析数据清单中的数值是否符合特定条件。
(5)统计函数:可以对选定区域的数据进行统计分析。
(6)查找和引用函数:可以在数据清单或者表格中查找特定数据,或者查找某一单元格的引用。
(7)日期与时间函数:用于在公式中分析和处理日期和时间值。
(8)过程函数:用于工程分析。
(9)信息函数:用于确定存储在单元格中的数据的类型。
(10)财务函数:可以进行一般的财务计算。
2.输入函数
输入函数与输入公式的过程类似。可以在单元格中直接输入函数的名称、参数,这是最快的方法。如果不能确定函数的拼写以及函数的参数,则可以使用函数向导插入函数。
一般在编辑栏中输入函数名称并加上左括号之后,Excel就会打开公式选项板。公式选项板的使用方法可以参见2.2.2节的内容。
操作实例2-8输入单个函数
其具体操作步骤如下:
(1)选中需要输入函数的单元格。
(2)选择“插入”|“函数”命令,或者直接单击“常用”工具栏中的“插入函数”按钮,打开“插入函数”对话框,如图2-85所示。
图2-85 “插入函数”对话框
(3)在“或选择类别”下拉列表框中选择所需的函数类型,则该函数类型的所有函数将显示在“选择函数”列表框中,在该列表框中选择需要使用的函数。
(4)单击“确定”按钮完成函数的输入。
在“插入函数”对话框中,两个列表框下方有选中函数的说明,通过这些说明可以了解所选函数的作用。
2.3.2 常见的函数
Excel中的函数有200多个,下面列出了比较常用的Excel函数及其参数,并且进行了解释、说明和举例。
1.财务函数
输入财务函数,并不需要输入财务等式,因为Excel函数处理的速度很快,而且不容易出错。
(1)DB函数
DB函数是用固定余额递减法来计算一笔资产在给定期间内的折旧费。其语法如下:
DB(cost, salvage, life, period, month)
其中,cost为资产的初始价值;salvage为资产全部折旧后的剩余价值;life为资产折旧的时间长度;period为需要计算折旧值的单个时间周期,它的单位必须与life相同;month为第一年的月份数,如果缺省,则默认为12个月。
例如,要计算500000元在剩余价值为100000元,3年使用期限,如果在第一年使用了6个月的情况下,第一年的固定余额递减折旧费的使用公式“=DB(500000, 100000, 3, l, 6)”,该公式返回182250.00。
(2)DDB函数
DDB函数利用双倍余额递减法或其他方法来计算指定期间内某项固定资产的折旧费。它返回加速利率的折旧费——早期大,后期小。这种方法是以资产的净账簿值(资产价值减去前几年的折旧费)的百分比来计算折旧费。其语法如下:
DDB(cost, salvage, life, period, factor)
其中,前4个参数的定义可以参见DB函数。factor参数是指定余额递减法,默认为2,表示一般的双倍余额递减法,如果设置为3,则表示3倍余额递减法。
例如,要计算100000元的机器在剩余价值为10000元,5年使用期限(60个月)的折旧费,可以使用公式“=DDB(100000,10000,60,1)”来计算第一个月的双倍余额递减折旧费为3333.33元;使用公式“=DDB(100000,10000,5,1)”来计算第一年的双倍余额递减折旧费为40000.00元;使用公式“=DDB(100000,10000,5,5)”来计算第5年的双倍余额递减折旧费为2960.00元。
(3)PV函数
PV函数是计算某项投资的一系列等额分期偿还额的现值之和或一次性偿还额。其语法如下:
PV(rate, nper, pmt, fv, type)
其中,rate为各期利率;nper为投资期限;pmt为各个数额相同时的定期支付额;fv为投资在期限终止时的剩余值,其默认值为0; type用于确定各期的付款时间是在期初还是期末,type为0表示期末,type为1表示期初,其默认值为0。
例如,有一个投资机会,只需要现在投资120000元,就可以在未来5年中每年返回30000元。为决定这项投资是否可以接受,必须计算将得到的等额分期偿还额30000元的现值之和。假设现在的银行利率为4.0%,可以使用公式“=PV(4%,5,30000)”。该公式使用了pmt参数;没有fv参数;也没使用type参数,表示支付发生在每个周期的期末。该公式返回值为-133554.67元,意味着现在投入133554.67元才能得到每年返回的30000元。由于现在只需要120000元,因此这是一项可以接受的投资。
如果该投资不是在未来5年中每年返回30000元,而是一次性的,这时就应该使用公式“=PV(4%,5, ,150000)”。
这里必须使用逗号作为占位符来表示未用到pmt参数,以便使Excel知道150000为fv参数;这里同样省略了type参数,其含义同上。该公式返回值为-123289.07元,意味着现在投入133554.67元才能得到5年后返回150000元,因此这仍然是一项可以接受的投资。
(4)NPV函数
NPV函数是基于一系列现金流和固定的各期利率,返回一项投资的净现值。一般来说,任何产生大于0的净现值都被认为有利可图。其语法如下:
NPV(rate, valuel, value2, …)
其中,rate为各期利率;valuel, value2, …为1~29笔支出及收入的参数值。它们所属各期间的长度必须相等,支付及收入的时间都发生在期末。NPV按次序使用valuel,value2, …来注释现金流的次序。所以一定要保证支出和收入的数额按正确的顺序输入。
如果参数是数值、空白单元格、逻辑值或表示数值的文字表达式,则都会计算在内;如果参数是错误值或不能转化为数值的文字,则被忽略。如果参数是一个数组或引用,只有其中的数值部分计算在内,忽略数组或引用中的空白单元格、逻辑值、文字及错误值。NPV函数在两个重要方面不同于PV函数。PV函数假定相同的支付额,而NPV则允许可变的支付额。另一个重要区别在于PV函数允许支付和接收发生在周期开始或者结束,而NPV函数假定所有支付和接收都均等分布,发生在周期结束。如果投资费用必须在前面全部付清,则不应将此项费用作为value参数之一,而应当从函数结果中减去它。另一方面,如果该费用必须在第一期结束时付清,则应当将它作为第一个负value参数。
例如,要进行一项投资150000元,预计第一年末损失10000元,而第二年末、第三年末和第四年末分别可以获得50000元、75000元、95000元。银行利率为5%,要估计这项投资是否划算,则应使用以下公式“=NPV(5%, -10000,50000,75000,95000)-150000”,其结果为28772.22元。所以这项投资可以接受。
(5)RATE函数
RATE函数用于计算得到一系列等额支付或者一次总支付的投资收益率。其语法如下:
RATE(nper, pmt, pv, fv, type, guess)
其中,nper, pmt, fv, type可以参考PV函数;pv为投资额现值;guess提供给Excel开始计算收益率的一个起点,默认值为0.1,即10%。
例如,考虑一项4年内每年可以得到100000元的投资,投资费用为320000元。要计算投资的实际收益率,可以利用以下公式“=RATE(4,100000, -320000)”。其结果为10%。准确的返回值为0.0956422744525717,但是由于答案是一个百分比,因此Excel将单元格格式转化为百分比。
RATE函数是利用迭代过程来计算利率的。函数从给定的guess参数值开始计算投资的利润率。如果第一个净现值大于0,则函数选择一个较低的利率进行第二次迭代。RATE函数继续这个过程直到得到正确的收益率或者已经迭代20次。如果在输入RATE函数后得到错误值“#NUM! ”,则Excel也许不能在20次迭代内求得收益率。选择一个不同的guess参数为函数提供一个运行起点。
(6)IRR函数
IRR函数是计算一组现金流的内部收益率。这些现金流必须按固定的间隔发生,如按月或按年。其语法如下:
IRR(values, guess)
其中,values为数组或包含用来计算内部收益率的数字单元格的引用。允许只有一个values参数,它必须至少包括一个正数值和负数值。IRR函数忽略文字、逻辑值和空白单元格。
IRR函数根据数值的顺序来解释现金流的顺序,故应确定按需要的顺序输入了支付和收入的数值。guess参见RATE函数。
IRR函数很近似于RATE函数。RATE函数和IRR函数的区别类似于PV函数和NPV函数的区别。与NPV函数一样,IRR函数考虑了投资费用和不等支付额的问题,故其应用范围更广一些。
例如,要进行一项120000元的投资,并预期今后5年的净收益分别为25000元、27000元、35000元、38000元和40000元。建立一个包含投资和收入信息简单工作表。在工作表的A1︰A6单元格中分别输入以下数值:-120000元、25000元、27000元、35000元、38000元和40000元。然后输入公式“=IRR(A l︰A6)”。
计算此项投资在5年后的内部收益率,结果为11%。输入公式“=IRR(Al︰A5)”。
计算此项投资4年后的内部收益率,结果为2%。输入公式“=IRR(A l︰A4, -10%)”。
计算此项投资3年后的内部收益率,并由-10%的利率开始算起,结果为-14%。
2.日期与时间函数
在前面已经提过有关日期与时间的运算,Excel中将日期和时间记录为序列数。下面简单介绍常用的日期与时间函数。
(1)NOW函数
NOW函数返回计算机的系统日期和时间所对应的日期、时间序列数。其语法为:NOW( )例如,当前日期为1999年6月14日20:52,如果正在使用的是1900日期系统,则输入公式“=NOW( )”,则返回36325.8697400463,如果单元格的格式为日期格式,则显示结果为1999-6-14 20:52。10分钟后NOW函数将返回36325.8770170139,如果单元格的格式为日期格式,则显示结果为1999-6-14 21:02。
(2)TODAY函数
TODAY函数返回当前日期的序列数,该函数与NOW函数的作用一样,只是不返回序列数的时间部分。工作表打开或者重新计算时Excel会更新序列数。其语法如下:
TODAY( )
(3)DATE函数
DATE函数返回某一特定日期的序列数。其语法如下:
DATE(year, month, day)
其中,year为年;month为月份,如果输入的月份大于12,将从指定年份的一月份开始往上累加;day为在该月份中第几天的数字,如果day大于该月份的最大天数时,将从指定月份的第一天开始往上累加。
函数DATE在那些年份、月份和日期的公式中非常有用。
例如,输入公式“=DATE(99,5,1)”,将返回36281,此序列数对应于1999年5月1日。
(4)DATEVALUE函数
DATEVALUE函数返回date text参数所表示的序列数。它可以将文字表示的日期转换成一个序列数。其语法如下:
DATEVALUE(date_text)
其中,date text参数可以是Excel预定义的任何日期格式。
例如,要返回1998年6月1日的序列数,可以使用公式“=DATEVALUE("06-01-98")”,将返回35947。
(5)NETWORKDAYS函数
NETWORKDAYS函数返回参数start_data和end_data之间总的工作天数。计算工作天数时应注意工作日不包括周末和专门指定的假期。其语法如下:
NETWORKDAYS=(start_date, end_date, holidays)
其中,start_date为起始日期的日期值;end_date为终止日期的日期值;holidays为可选清单,指需要从工作日历中排除的日期值,如各种法定假日或自定假日。
如果该函数不存在,运行“安装”程序来加载“分析工具库”,安装完毕之后,必须通过选择“工具”|“加载宏”命令,在“加载宏”对话框中选择并启用它。
如果任何参数为非法日期值,函数NETWORKDAYS将返回错误值“#NUM! ”。
例如,要计算1998年3月1日到1998年3月19日的总工作天数(除去节假日和3月8日),则使用公式“=NETWORKDAYS(DATEVALUE("03-01-98")”, DATEVALUE("03-19-98"), DATEVALUE("03-08-98")”,其结果为14。
(6)WEEKDAY函数
WEEKDAY函数返回与serial_number对应的序列数是星期几。其值为1~7之间的整数。其语法如下:
WEEKDAY(serial_number, return_type)
其中,serial_number为日期-时间代码,它可以是数字,也可以是文本,如“30-Apr-1998”或者35915; return_type为可选,用以确定一星期从哪天开始,默认值由星期日开始为1,到星期六为7;其值为2,则由星期一开始为1,到星期日为7;其值为3,则由星期一开始为0,到星期日为6。
例如,要想知道1998年12月25日是星期几,可以输入公式“=WEEKDAY("12-25-98", 2)”,其结果为5,即星期五。
(7)EOMONTH函数
EOMONTH函数返回start_date之前或之后指定月份中最后一天的日期序列数。其语法如下:
EOMONTH(start_date, months)
其中,start_date为起始日期的日期值;months为start_date之前或之后的月数。如果是正数,指将来的日期,如果是负数,指过去的日期。
例如,要想知道这个月底的序列数,可以使用公式(设今天为1998年10月1日)“=EOMONTH(TODAY( ),0)”,其结果为36099或10/31/98。
3.数学与三角函数
数学与三角函数是工作表中大部分计算的基础,特别是在它当中可以找到大多数科学与过程函数。
(1)SUM函数
SUM函数用于计算一系列数字之和。其语法如下:
SUM(numberl, number2, …)
其中,numberl, number2, …为1~30个需要求和的参数,它们可以是数字、公式、范围或者产生数字的单元格引用。
SUM函数忽略数组或引用中的空白单元格、逻辑值、文本。如果参数为错误值或为不能转换成数字的文本,将会导致错误。
例如,输入公式“=SUM(13, 12)”,其结果为25。而输入公式“=SUM("13", 22, TRUE)”,其结果为36,因为文本值被转换成数字,而逻辑值TRUE被转换成数字1。
如果单元格A1中为TEXT,输入公式“=SUM(13, 22, A1)”,其结果为35,因为Excel忽略了文本。
如果单元格A1:A5包含10、20、30、40和50,则输入公式“=SUM(A l:A3)”,结果为60。而输入公式“=SUM(A l:A5,100)”,其结果为250。
(2)ROUND函数
ROUND函数将参数引用的数舍入到指定的小数位数。其语法如下:
ROUND(number, num_digits)
其中,number为需要进行舍入的数值、包含数值的单元格引用或者结果为数值的公式;num_digits为舍入的位数,可以为任意整数。当它为负数时将舍入小数点左边的位数;当它为0时将舍入最近的整数。在Excel中,下舍小于5的数字,上入大于或等于5的数字。如表2-6所示的是ROUND函数的几个例子。
表2-6 ROUND函数返回值
(3)EVEN函数
EVEN函数返回沿绝对值增大方向取整后最接近的偶数。其语法如下:
EVEN(number)
其中,number为要取整的数值。如果number为非数值参数,则EVEN函数返回错误值“#VALUE! ”。
不论number的正负号如何,函数都向远离零的方向舍入,如果number恰好是偶数,则无需进行任何舍入处理。如表2-7所示的是EVEN函数的几个例子。
表2-7 EVEN函数返回值
(4)PI函数
PI函数返回常量 π的精确到14个小数位的数值是3.14159265358979。其语法如下:
PI( )
PI函数没有参数,通常嵌套在公式或其他函数中。
例如,要计算圆的面积,可以用 π乘以圆半径的平方。输入公式“= PI( )*(5^2)”,其计算半径为5的圆的面积。结果舍入到两个小数位后是78.54。
(5)RADIANS函数
RADIANS函数用来将角度转换为弧度。三角函数是以弧度而不是角度来度量角度的。弧度根据常量 π计算角度的大小,其中180° 定义为 π弧度。其语法如下:
RADIANS(angle)
其中,angle为用度数度量的角度。
例如,输入公式“=RADIANS(180)”,其返回3.14159265358979。
(6)SIN函数
SIN函数返回角度的正弦值。与之类似的有求余弦值的COS函数,求正切值的TAN函数。SIN函数的语法如下:
SIN(angle)
其中,angle为以弧度度量的角度。
如果已知角度要求其正弦值,可以将角度乘以 π/180,或者用RADIANS函数转换成弧度。
例如,要计算30度的正弦值,可以使用公式“=SIN(30*PI( )/180)”或者“=SIN(RADIANS(30))”,其结果返回0.5。
(7)ASIN函数
ASIN函数返回角度的反正弦值。与之类似的有求反余弦值的ACOS函数,求反正切值的ATAN函数。ASIN函数的语法如下:
ASIN{number}
其中,number为角度的正弦值,介于-1~1之间。ASIN函数总是返回-π/2~π/2之间的一个弧度值。
例如,输入公式“=ASIN(0.5)”,将返回0.523598775598299,即 π/6。
4.统计函数
统计函数可以帮助用户处理一些简单的问题,如计算平均值、计算某些项目的个数等。统计函数还可以进行一些简单的统计分析,如标准偏差、方差等。
(1)AVERAGE函数
AVERAGE函数返回参数平均值(算术平均值)。其语法如下:
AVERAGE(numberl, number2, …)
其中,numberl, number2, …为要计算平均值的1~30个参数,参数可以是单个值或者范围,范围包括数字、单元格引用或者包含数字的数组。AVERAGE函数忽略文本、逻辑值或空单元格。
例如,C12:C15单元格中分别是以下的数值:2、3、4、5,输入公式“=AVERAGE(C12:C15)”,则返回3.5。而输入公式“=AVERAGE(C12:C15,11)”,则返回5。
(2)COUNT函数
COUNT函数返回参数中数字的个数。其语法如下:
COUNT(valuel, value2, …)
其中,valuel, value2, …为要计算数字个数的1~30个参数,参数可以是单个值或者范围,范围包括数字、单元格引用或者包含数字的数组。COUNT函数忽略文本、逻辑值或空单元格,只计算数字类型的数据个数。
如果要统计逻辑值、文字或错误值,则使用函数COUNTA。
例如,A6:A9分别是l、2、3、4,则输入公式“=COUNT(A6:A9)”,则返回4。如果A8为空白单元格,则该公式返回3。
(3)COUNTA函数
COUNTA函数返回参数中非空白值的个数。其语法如下:
COUNTA(valuel, value2, …)
其中,valuel, value2, …为要计算非空白值个数的1~30个参数,参数可以是单个值或者范围,范围包括数字、单元格引用或者包含数字的数组。COUNTA函数忽略数组或者单元格引用中的空单元格。
例如,B14是唯一的空单元格,则输入公式“=COUNTA(B1:B15)”,则返回14。
(4)STDEV函数
STDEV函数是计算某一样本的标准偏差。其语法如下:
STDEV(numberl, number2, …)
其中,numberl, number2, …为对应于总体样本的1~30个参数。
STDEV函数忽略逻辑值(TRUE或FALSE)和文本。如果不能忽略逻辑值和文本,应使用STDEVA函数。如果数据代表全部样本总体,则应该使用STDEVP函数来计算标准偏差。
例如,要计算在B5:B14中样本值45、13、68、32、10、70、18、10、50、29的标准偏差,使用公式“=STDEV(B5:B14)”,将返回19.7329391852529。
(5)DEVSQ函数
DEVSQ函数返回数据点与各自样本均值偏差的平方和。其语法如下:
DEVSQ(numberl, number2, …)
其中,numberl, number2, …参数参见STDEV函数。
例如,要计算在A2:A11中样本值15、23、78、72、70、60、56、17、58、99的均值偏差的平方和,使用公式“=DEVSQ(A2:A11)”,将返回7081.6。
(6)MAX函数
MAX函数返回参数中的最大值。其语法如下:
MAX(numberl, number2, …)
其中,numberl, number2, …为需要找出最大数值的1~30个数值。参数可以是单个值或者范围,范围包括数字、单元格引用或者包含数字的数组。MAX函数忽略文本、逻辑值或空单元格,只考虑数字类型的数据大小。如果逻辑值和文本不能忽略,使用函数MAXA来代替;如果参数不包含数字,MAX函数将返回0。
例如,单元格C1:D3包含数字-2、4、32、30、10、7,则输入公式“=MAX(Cl:D3)”,将返回32。
5.查找及引用函数
当用户需要确定单元格内容、范围或者选择的范围时,查找及引用函数显得非常有用。
(1)ADDRESS函数
ADDRESS函数返回指定的单元格引用,结果用文本形式来表示。其语法如下:
ADDRESS(row_num, column_num, abs_num, al, sheet_text)
其中,row_num为单元格引用中的行号;column_num为单元格引用中的列号;abs_num用以指定引用类型,默认值为1,即表示绝对引用;当其为2时,表示绝对行,相对列;当其为3时,表示相对行,绝对列;当其为4时,表示相对引用;a1用以指明引用样式,默认值为TRUE,即返回A1形式的引用,如果其为FALSE,即返回R1C1形式的引用;sheet_ text是文本,指明作为外部引用的工作表名,如果省略,则不使用任何工作表名。
例如,输入公式“=ADDRESS(15,4,2, TRUE)”,将返回D$l5。而输入公式“=ADDRESS(10,5,4, FALSE)”,将返回R10C5。
(2)VLOOKUP函数
VLOOKUP函数用于查找所构造的表格中存放的信息。当在表格中查找信息时,一般用行索引或者列索引来定位特定单元格。Excel在利用这种方式时做了一些变动,即通过查找第一列中小于或者等于用户所提供的最大值来得到一个索引,然后用另一指定参数作为其他索引。这样可以根据表格中的信息查找数值,而不必确切地知道数值在哪里。其语法如下:
VLOOKUP(lookup_value, table_array, col_index_num, range lookup)
其中,lookup_value为要在表格中查找以得到第一个索引的数值。它可以为数值、引用或文字串;table_array为定义表格的数组或者范围名称;其第一行的数值可以为文本、数字或逻辑值;col_index_num为开始选择结果的表格列(第二个索引),当其值为1时,返回table_array第一列的数值,当其值为2时,返回table_array第二列的数值,以此类推。
如果其值小于1, VLOOKUP函数返回错误值“#VALUE! ”;如果其值大于table_array的列数,VLOOKUP函数返回错误值“#REF! ”; range_lookup为一逻辑值,指明函数VLOOKUP查找时是精确匹配还是近似匹配,其默认值为TRUE,此时函数返回近似匹配值,如果其为FALSE, VLOOKUP函数将查找精确匹配值,如果找不到,则返回错误值“#N/A! ”。
例如,要在如图2-86所示的表格中检索数据,输入公式“=VLOOKUP(42, A2:C6, 3)”,其返回值为24。
图2-86 要检索数据的表格
其检索过程如下:先找到包含比较值的列,这里为列A,接下来扫描比较值查找小于或者等于lookup value的最大值。由于第4个比较值40小于41,而第5个比较值50又大于41,因此以包含40的行(即行5)作行索引。列索引是col_index_num参数,这里是3,因此列C中包含所要的数据。由此可以得到单元格C5中的数值24。
(3)HLOOKUP函数
HLOOKUP函数在表格或数值数组的首行查找指定的数值,并由此返回表格或数组当前列中指定行处的数值。HLOOKUP的用法可以参看VLOOKUP。其语法如下:
HLOOKUP(lookup_value, table_array, col_index_num, range_lookup)
(4)OFFSET函数
OFFSET函数返回具有指定高度和宽度,位于相对于另一个引用的指定位置的引用。其语法如下:
OFFSET(reference, rows, cols, height, width)
其中,reference为计算偏移的起点位置;rows指定reference参数和被返回引用之间的垂直距离,正值指定相对reference参数向下偏移;cols指定reference参数和被返回引用之间的水平距离,正值指定相对reference参数向右偏移;height为高度,即所要返回的引用区域的行数,它必须为正数,如果省略则以reference参数的高度为高度;width为宽度,即所要返回的引用区域的列数,它必须为正数,如果省略则以reference参数的宽度为宽度。
例如,输入公式“=OFFSET(A3:C5, -1,0,3,3)”,将返回A2:C4单元格引用。一般OFFSET函数不单独使用,它与需要将引用作为参数的函数连用,如输入公式“=SUM(OFFSET(a3:C5, -1,0,3,3))”,将返回A2:C4单元格区域数值之和。
(5)INDIRECT函数
INDIRECT函数可以从单元格引用找到单元格的内容。其语法如下:
INDIRECT(ref_text, a1)
其中,ref_text为一个A1形式的引用、R1C1形式的引用或者单元格名称,如果它的输入项无效,则函数返回错误值“#REF! ”; a1为一个逻辑值,指示使用的是哪一种引用的类型。如果其值为FALSE,则Excel将其解释为R1C1格式;如果其值为TRUE(默认值),则Excel将其解释为A1格式。
例如,工作表的单元格C5包含文本B2,而单元格B2中为数值17,则输入公式“=INDIRECT(c5)”,其返回值为17。如果工作表设置为R1C1格式的引用,而且单元格R5C3包含单元格R2C2的引用,单元格R2C2中为数值17,则输入公式“=INDIRECTT(R5C3, FALSE)”,其返回值为17。
(6)INDEX函数
INDEX函数返回指定范围中特定行与特定列交叉点上的单元格引用。其语法如下:
INDEX(reference, row_num, column_num, area_num)
其中,reference指定一个或多个区域的引用,如果指定多个区域,则必须用括号括起来,区域之间要用逗号隔开;row_num指定引用中的行序号;column_num指定引用中的列序号;area_num指定reference所确定的几个区域中的某个,其默认值为1。
例如,输入公式“=INDEX((D5:F9, D10:F14),1,2,2)”,返回区域D10:F14中第1行、第2列的单元格引用。
6.数据库函数
Excel中各个数据库都使用同样的参数:数据库(database),字段(field)和条件(criteria)。函数DAVERAGE中讨论的参数说明适用于所有的数据库函数。
(1)DAVERAGE函数
DAVERAGE函数计算满足查询的数据库记录中给定字段内数值的平均值。其语法如下:
DAVERAGE(database, field, criteria)
其中,database为构成数据清单或数据库的单元格区域,它可以是一个范围或者一个范围引用的名称;field指定函数所使用的数据列,它可以是引号中的字段名,包含字段名的单元格引用或者是数字;criteria为对一组单元格区域的引用,这组单元格区域用来设定函数的匹配条件。数据库函数可以返回数据清单中与条件区域所设定的条件相匹配的信息。条件区域包含了函数所要汇总的数据列(即field)在数据清单中的列标志的一个副本。
例如,如图2-87所示的工作表,单元格A3:C15为数据库区域,要统计收入大于5000元的收入平均值,在区域E3:G4上输入如图的条件,使用公式“=DAVERAGE(a3:C15, "收入", E3)”,将得到收入平均值为7575.65333333333。
图2-87 数据库区域
(2)DCOUNT函数
DCOUNT函数用于计算数据库中给定字段满足条件的记录数。其语法如下:
DCOUNT(database, field, criteria)
其中,参数field为可选项,如果省略,DCOUNT函数将返回数据库中满足条件criteria的所有记录数;其他参数参见DAVERAGE函数。
例如,如图2-87所示的数据库区域,要统计收入大于5000元的记录数,可以使用公式“=DCOUNT(a3:C15, E3:G4)”,得到的结果为9。
(3)DSTDEVP函数
DSTDEVP函数将数据清单或数据库的指定列中满足给定条件单元格中的数字作为总体样本计算其标准偏差。其语法如下:
DSTDEVP(database, field, criteria)
其中,各参数与DAVERAGE函数相同。
例如,如图2-87所示的数据库区域,要计算收入大于5000元的样本的标准偏差,可以使用公式“=DSTDEVP(a3:C15, "收入", E3:G4)”
将得到结果为1082.06790399986。
(4)DMAX函数
DMAX函数将返回数据库中满足条件的记录中给定字段的最大值。其语法如下:
DMAX(database, field, criteria)
其中,各参数与DAVERAGE函数相同。
例如,图2-87所示的数据库区域,要查找收入大于5000元的记录中支出的最大值,可以使用公式“=DMAX(a3:C15, "支出", E3:G4)”,将返回结果6571.69。
7.文本函数
文本函数又称为字符串函数,对于处理转化到ASCII文件的文本以及要装载到主机的文本,都是非常重要的。
(1)CONCATENATE函数
CONCATENATE函数是返回将给出的几个字符串合并的一个字符串。其语法如下:
CONCATENATE(Textl, Text2, …)
其中,Textl, Text2, …为1~30个将要合并成单个字符串的文本。这些文本可以是字符串、数字或单个单元格引用。
例如,输入公式“=CONCATENATE("Welcome", "President! ")”,将返回合成字符串“Welcome President”。
又例如,根据图2-87所示的工作表,输入公式“=CONCATENATE("今年", A8, "的", B3, "为", B8, "元")”,将返回今年5月的收入为6541.89元。
(2)VALUE函数
VALUE函数将以文本形式输入的数字转换成数值。其语法如下:
VALUE(text)
其中,text为括在双引号内的字符串,也可以是包含文字的单元格引用。它可以是任何可识别的格式,包括自定义的格式。如果它不是其中的任何一种格式,VALUE函数将返回错误值“#VALUE! ”。
例如,输入公式“=VALUE("13425")”,将返回13425。如果单元格B5中文本为13425,则输入公式“=VALUE(B5)”,也返回13425。
VALUE函数还可以将日期和时间格式的文本转换为日期值,例如,输入公式“=VALUE("1-1-1998")”,将返回日期系列值35796。
(3)FIXED函数
FIXED函数将数字四舍五入到指定的小数位数,用逗号和一个圆点来格式化结果,并以文本形式显示结果。其语法如下:
FIXED(number, decimals, no_commas)
其中,number为要转换成字符串的数;decimals为一个整数,当其为正值时指定小数点右边的位数,为负值时指定小数点左边的位数;no_commas为逻辑值,用于指定结果中是否要包括逗号,其默认值为FALSE,即在结果中插入逗号。
例如,输入公式“=FIXD(5986.432,2, TRUE)”,将返回字符串5986.43。而输入公式“=FIXD(5986.432, -l, FALSE)”,将返回字符串5990。
(4)LEN函数
LEN函数返回输入项中的字符个数,其语法如下:
LEN(text)
其中,text为要计算字符个数的字符串,它可以是括在括号里的文本,也可以是单元格引用。
例如,输入公式“=TEXT("text")”,返回4。如果单元格B5中包含字符串text,则输入公式“=TEXT(B5)”,也返回4。
LEN函数返回显示文字或者数值的长度,而不是基本单元格内容的长度。
例如,如果单元格B5中公式“=BI+B2+B3+B4”,则计算结果为98。而输入公式“=LEN(B5)”,将返回数值98的长度2。
(5)REPLACE函数
REPLACE函数用某一文字串替换另一个字符串中的全部或者部分内容。其语法如下:
REPLACE(old_text, start_num, num_chars, new_text)
其中,old_text为被替换的字符串;start_num为old_text中要替换为new_text字符的起始位置;num_chars为old_text中要替换为new_text字符的个数;new_text为用于替换old_ text字符的字符串。
例如,单元格A5中为字符串“Hello, Kitty! ”,要将其放到单元格B1中,并用字符串“Windy? ”来替换其中的“Kitty”,则选择B1单元格,然后使用公式“=REPLACE(a5, 7,5, "Kitty")”,得到的结果为“Hello, Windy! ”
(6)REPT函数
REPT函数将指定字符串重复指定次数作为新字符串填充单元格。其语法如下:
REPT(text, number_times)
其中,text指定要重复的字符串;number_times为重复的次数,它可以是任意整数,但重复的结果不能超过255个字符,如果其值为0,则REPT函数保持单元格为空白,如果它不是整数,则忽略其小数部分。
例如,要想得到100个“-”,可以使用公式“=REPT("-",100)”,结果是一个由100个“-”组成的字符串。
(7)SEARCH函数
SEARCH函数返回一个指定字符或者字符串首次出现在另外一个字符串中的起始位置,其语法如下:
SEARCH(find_text, within_text, start_num)
其中,find_text为要查找的字符串,可以在其中使用通配符问号“? ”和星号“*”,问号可以匹配任何单个字符,星号匹配任何字符序列。如果要查找实际的问号或星号,那么应在该字符前加一个代字符(~)。如果找不到find-text,函数返回错误值“#VALUE! ”;within_text为被查找的字符串;start_num为开始查找的位置,默认值为1,从左边开始搜索,如果其值为小于等于0或大于within_text的长度,则返回错误值“#VALUE! ”。
例如,输入公式“=SEARCH("here", "Welcome here! ")”,返回9,而输入公式“=SEARCH("a? d", "Welcome here, ladies and gentlemen! ")”,返回21。
8.逻辑函数
逻辑函数是功能强大的工作表函数,它可以使用户对工作表结果进行判断和逻辑选择。
(1)IF函数
IF函数返回根据逻辑测试真假值的结果。它可以对数值和公式进行条件检测。其语法如下:
IF(logical_test, value_if_true, value_if_false)
其中,logical_test为逻辑值,它可以是TRUE或者FALSE,也可以是计算结果为TRUE或FALSE的任何数值或表达式。Value_if_true是logical_test为TRUE时函数的返回值,可以是某一个公式。如果logical_test为TRUE并且省略value_if_true,则返回TRUE。Value_if_false是logical_test为FALSE时函数的返回值,可以是某一个公式。如果logical_test为FALSE并且省略Value_if_false,则返回FALSE。
IF函数最多可以嵌套7层,方法是用value_if_true及value_if_false参数构造复杂的检测条件。
例如,判断单元格B5中的数值是否小于60, “是”则返回“FAIL! ”, “否”则返回“PASS! ”,可以使用公式“=IF(B5<60, "FAIL! ", "PASS! ")”如果还要对PASS的情况细分等级,即60~85为“FINE! ”,85及以上为“EXCELIENT! ”,可以使用嵌套公式“=IF(B5<60, "FAIL! ", IF(B5<85, "FINE! ", "EXCELLENT! "))”,这样可得到所需的等级。
(2)AND函数
AND函数是判断所有参数的逻辑值是否为真,“是”则返回“TRUE”,只要有一个逻辑值为假即返回“FALSE”。其语法如下:
AND(logical1, logical2, …)
其中,logical1, logical2, …为1~30个逻辑值参数,各逻辑值参数可以为单个逻辑值TRUE或FALSE,也可以是包含逻辑值的数组或者单元格引用。如果数组或者单元格引用中包含文字或空单元格,则忽略其值。如果指定的单元格区域内包括非逻辑值,AND将返回错误值“#VALUE! ”。
例如,要判断单元格B10中的数值是否大于5而且小于10,可以使用公式“=AND(B10>5, B10<10)”,则当B10单元格的数值大于5而且小于10时返回“TRUE”,否则返回“FALSE”。
(3)NOT函数
NOT函数对给定参数的逻辑值求反。其语法如下:
NOT(logical)
其中,logical是一个逻辑值参数,可以是单个逻辑值TRUE或FALSE或者是逻辑表达式。如果逻辑值为FALSE,函数返回TRUE;如果逻辑值为TRUE,函数返回FALSE。
例如,输入公式“=NOT(B5=10)”,在B5单元格数值等于10时返回“FALSE”,否则返回“TRUE”。
(4)OR函数
OR函数判断给定参数中的逻辑值是否为真,只要有一个为真即返回“TRUE”,如果全部为假,则返回“FALSE”。其语法如下:
OR(logical1, logical2, …)
其中,logical1, logical2, …与AND函数相同。
例如,要判断单元格C6中是否为10或者20,可以使用公式“=OR(C6=10, C6=20)”,当单元格中是10或20时返回“TRUE”,否则返回“FALSE”。