公式
前言
excel支持的公式实在是太多了,本文章只介绍本人常用的excel公式,其他公式请查阅官方文档。由于网络原因,微软文档的视频可能无法观看,也可以查看excel-easy文档。
相对引用和绝对引用
我们在使用公式时,常常需要引用其他单元格的值,而不是固定的数字,所以理解公式中单元格的引用是很重要的。引用单元格的值很简单,在公式中使用单元格的名字就可以了,比如A1引用A列第一行的单元格的值。
那为什么又会存在相对引用和绝对引用呢?
这是因为excel具有 “批量填充” 功能,软件会对我们输入的公式进行一定的推断,复用在相似单元格中。比如下图,在多行间复用同一公式。
我们可以看到填充后每行C列单元格的公式有规律的变换引用的单元格以复用第一行的公式。这种填充后由软件推断单元格位置变换的引用方式称为相对引用。
很多时候,相对引用的方式都是我们想要的,但却不是总是这样的。比如下图,批量计算给定人民币能够兑换的港币数值,使用相对引用的方式得到错误结果。
我们希望公式填充时,应该保证B1不变,只要将B1改为$B$1即可。
解释
$符号表示绝对引用,是不会在填充时进行位置推断变化的。这个符号可以只用于字母前面表示列号不变,行号改变,比如$B1;也可以只用于行号,或者行列都使用。- 引用一整列可以使用
列号:列号的方式,比如A:A引用A列整列。行引用类似,比如1:1引用第一行。
Range引用
上面说到的都是单元格Cell的引用,如果要引用一个范围Range只需要给定矩形范围的左上角和右下角单元格,并在中间添加英文冒号:即可。如下图,框起来部分就是A1:D9表示的范围。
工作表和工作簿的引用
参考文章:How to Reference Another Sheet or Workbook in Excel (with Examples)
引用其他工作表使用SheetName!Cell/Range的格式,比如引用工作表Sheet2的A1单元格:
Sheet2!A1
引用已经打开的其他工作簿只要在上面的基础上添加[WorkbookName.xlsx],引用Workbook2.xlsx就是:
[Workbook2.xlsx]Sheet2!$A$1
而引用未打开的单元格就要加上文件路径:
'C:\\path\to\file\[Workbook2.xlsx]Sheet2'!$A$1
注意
- 如果名称存在空格或其他非字母、数字的字符(@, !, #, -,etc.),需要添加单引号,比如
'Sheet-2'!A1。 - 引用其他工作簿时只能使用绝对引用。
- 在本工作簿引用其他工作表,在工作表名字更改时,涉及的公式均会自适应更改;而跨工作簿引用,则不会自适应更改,需要手动更改。
名称定义
给部分公式添加别名,方便复用或者精简公式。比如下面的公式:
'Sheet2'!$A$1:$D$9
实在是冗长,我们给$A$1:$D$9取个别名,比如叫做Range1 那么这个单元格表达式就可以变成:
'Sheet2'!Range1
具体的名称定义操作是在公式选项卡中点击定义名称按钮,然后在编辑器输入相应信息:
而该按钮旁边的名称管理器可以实现对别名的管理,包括删除、修改等。
在别名很多时,我们在输入公式时可以按F3调出名称选择器。
四则运算
excel支持所有四则运算符号,分别用+、-、*、/表示加减乘除,同时支持括号()。启用公式运算时,要先在单元格中输入一个等号=。
=5+(49/7-2*3)
常用函数
函数不再进行不必要的说明,仅仅给出使用示例。示例双斜杠后面表示注释说明,不是公式的一部分。
计算函数
求和函数SUM
=SUM(A1:A9) // 求和A1:A9区域的单元格数值
数值单元格计数函数COUNT
=COUNT(A1:A9) // 计算A1:A9区域的数值单元格个数
非空单元格计数函数COUNTA
=COUNTA(A1:A9) // 计算A1:A9区域的非空单元格个数
可见单元格计算函数SUBTOTAL
在使用筛选的情况下,直接使用求和等函数会得到错误的结果。如果只想让可见单元格参与计算,就需要用到SUBTOTAL。
=SUBTOTAL(9, A1:A9) // 求和A1:A9区域的可见单元格数值
公式的9是SUM函数的标识,仅仅表示使用SUM来计算可见单元格,没有其他特别含义。你可以应用其他函数,只要给定对象的数字标识就可以。不用担心记不住数字标识,输入公式时,软件会给予提示。
偏移引用函数OFFSET
该函数用于获取相对于某单元格行列偏移后的范围引用。
=OFFSET(A1, 2, 0, 3, 1) // 获取相对于A1单元格行偏移为2个单元格、列偏移量为0的、高为3个单元格长度、宽为1个单元格长度的范围引用
文本转引用函数INDIRECT
该函数可以将文本转换成其描述的范围的引用,比如:
=INDIRECT("A1") // 获取A1单元格引用
特别地,该函数对命名范围named range也是适用的。
文本拼接函数CONCATENATE
该函数用于拼接文本字符串,作用与&相同。
以下示例表示连接A1与B1单元格
= CONCATENATE("A1文本:", A1, CHAR(10), "B1文本:", B1)
- 以上使用了公式
CONCATENATE进行字符串的拼接,在文本不多的情况下,也可以直接使用&操作符连接字符串。- CHAR(10)表示换行符
- 最终单元格结果可能没有换行,这时需要点击开始选项卡的换行按钮
文本分割函数TEXTSPLIT
函数定义:
= TEXTSPLIT("拆分字符串/单元格","按列分割分隔符<如不使用该模式则该项不用赋值>","按行分割分割符<同上>",True/False<是否忽略空白项>, 0/1<是否区分大小写>)
示例:
将a-b-c-d-e-f字符串按行拆分:
=TEXTSPLIT("a-b-c-d-e-f`",,"-")
结果:
匹配函数VLOOKUP
=VLOOKUP(A1,Sheet2!A1:D9,2,FALSE)
这个函数的意思是用A1去匹配工作表Sheet2的A1:D9范围内的第一列。
当在该列找到与这个A1单元格内容匹配的行,就把改行第2列对应单元格内容返回。
而False表示匹配的方式是精确匹配,就是数值完全相同才算匹配成功。
注意
- 公式中范围的第一列必须是用于匹配值的列。
- 范围必须包括需要返回的列。
匹配函数xlookup
vlookup总是默认使用参考区域的第一列和查找值匹配,这不总是我们想要的。通过xlookup,我们可以灵活地指定参考列。看个例子:
= XLOOKUP(A1, refsheet!C:C, refsheet!A:A, "", FALSE)
这个公式表示使用refsheet的第C列作为参考列,而refsheet的第A列作为取值列,这样就打破了vlookup取值列不能在参考列之前的僵局。
补充:这里没有使用绝对引用是因为使用了整列引用,没有行号改变的问题。
