Excel用SUMIF函数统计多个条件的方法

追加带有统计条件的“工作列”

SUMIF 函数和 COUNTIF 函数,都是用于计算符合条件的单元格的总和,以及单元格个数的函数。如果想使用这两种函数计算出2个条件以上的统计结果的话,我们需要稍微动一下脑筋。

比如下表,仅在单元格 H4中为 A 列负责人“吉田”、B 列商品代码为“A001”这个条件下,在 D 列中显示销售额数值。

SUMIF 函数第一参数只能指定1列。但在此表中,元数据中无法在1列中同时判定负责人和商品代码这2个条件。A 列只能判定负责人,B 列只能判定商品代码。

这时候,就需要“在元数据中追加作为新的统计条件的数据列”。这样的做法,通常被称为追加“工作列”或“计算单元格”。

我们来尝试添加结合负责人姓名和商品代码的数据列。具体操作如下。

➊ 在单元格 E4输入下列公式,并一直复制粘贴到数据最后一行。

=A4&B4

➋ 在单元格 H4输入下列公式:

=SUMIF($E:$E,$G4&H$3,$D:$D)

➌ 将单元格 H4中的公式复制至全表。

在这里,设置绝对引用也十分重要。利用指定 SUMIF 函数的参数指定各个单元格时,按几次F4 键就会像上面这样出现符号“$”。

然后,将最开始在 H4中输入的公式一直向右复制至 M 列,向下复制至第8行。这里,为使引用单元格不偏离正确的列和行,设定了绝对引用。

要重视简单易懂

在2007版本之后的 Excel 中,追加了复数条件下也能统计数据总和的 SUMIFS 函数和 COUNTIFS 函数。甚至像前文中的例子一样,不需要追加工作列也可以求和。但是,如果统计条件增多,参数的指定就会变得复杂,因此,需要追加工作列,分成几个步骤来处理。

另外,数组公式和 SUMPRODUCT 函数也可以用同样的方式处理,但就从简单易懂这点上来看,我还是推荐大家采用追加工作列这种方法来处理。

Excel不显示错误值的技巧

逐次修正错误会导致效率低下

在输入订单的明细栏、单价等数据时,只要输入商品 No.就可以同时显示商品名和单价。如果预先可以设置这样的机制,就能快速推进工作了。同时,还能避免人工输入造成的错误。我们在 B 列中输入只要在 A 列中输入商品 No.,就能显示相应的商品名称的 VLOOKUP 函数。

➊ 在单元格 B2中输入以下 VLOOKUP 函数:

=VLOOKUP($A2,$E:$G,2,0)

➋ 按回车键确定,并将公式一直复制粘贴到最后一行。

如图所示,单元格中会出现“#N/A”这样的错误值。这是由于函数公式中存在错误所误造成的。若是在单元格 A2中输入1,就会从负责商品栏中导出对应的商品名称。

在单元格 A2中输入1,显示商品名

总而言之,由于插入的是以商品 No.为检索值的函数,如果 A 列中皆为空白单元格,自然就会出现错误。

如果是仅在公司内部使用的工作表,这样也没什么问题。但是,如果是制作报价单或订单的话,要尽可能避免这种错误值的出现。但是,只是单纯删去单元格中的函数,再次使用时还是需要重新输入公式,这样非常没有效率。

如结果有误,则返回空白值

这一问题,可以运用处理“计算结果有误的话,返回空白值”的函数公式来解决。这时,我们会用到 IFERROR 函数(Excel 2007之后的版本中具备的函数)。

通常都是因为先输入基本公式后,才发现有可能会有错误,再进行隐藏错误的处理。因此,输入公式时就要嵌入先前提到的 VLOOKUP 函数。最终,单元格 B2中要输入以下公式:

=IFERROR(VLOOKUP($A2,$E:$G,2,0),””)

➊ 选择单元格 B2,按F2 键,使单元格处于可编辑状态

➋ 在等号(=)之后输入“i”后出现候选菜单,选择第2个“IFERROR”。

➌ 按TAB 键确定后,补充输入=IFERROR(。

➍ 完成公式后按回车键确定,并将公式一直复制粘贴到最后一行,就可以隐藏错误值。

➎ 在 A 列中输入商品 No.,会自动显示商品名与单价的数据。

IFERROR 函数第二参数中,连续输入了2个引号””,这是指定空白值的意思。

把 B 列的公式复制到 C 列,VLOOKUP 函数第三参数改为3。

IFERROR 函数的特点在于,第一参数指定的函数为错误值时,就会返回第二参数指定的值。在这个例子中,第二参数指定的是空白值,因此也就设定了“第一参数的 VLOOKUP 函数若为错误值,显示为空白结果”这样的机制。

如使用2003之前的 Excel 版本的话,应该怎么做

只有在 Excel 2007之后的版本才可以使用 IFERROR 函数隐藏错误值。如果你的 Excel 是2003版之前的,可以使用下面的公式:

=IF(ISERROR(公式),””,公式)

ISERROR 函数可以检查括号内指定的公式是否为错误值。如果是则为“真”,否则返回“伪”值。以此为基础来解读 IF 函数,便可知其处理过程是这样的:第一参数的逻辑式若为真,也就是说 ISERROR 函数结果为真,则返回第二参数的空白值,否则将继续处理公式。

是否能用VLOOKUP函数获得检索列左侧的数值?

VLOOKUP 函数下,无法取得检索列左侧的数值

VLOOKUP 函数可以说是 Excel 中最重要的函数,这里让我们再来看看其具体的公式和功能。

【公式】

=VLOOKUP(检索值,检索范围,列数,0)

【功能】

在检索范围最左一列中查找与检索值相同的单元格,然后在该单元格中返回第三参数指定的列数中的某个单元格的值。

“从检索范围的最左边的列返回到第三参数指定的列数中的某个单元格的值”,也就是“返回位于该列右侧的值”。

那么,问题就来了。

“难道无法直接用这一列左侧的数值吗?”

“给第三参数做减法导出数值就可以了吧?”或许有许多人都抱有这样的疑问。但答案是:“不可以”。

那么,如果想要获得位于检索列左侧的列中的数值,应该怎么办?

什么是 OFFSET 函数

组合使用 OFFSET 函数与 MATCH 函数可以解决前文中的问题。OFFSET 函数的本质是“确定作为基准的单元格,通过上下左右偏移得到新的区域的引用”。

【公式】

=OFFSET(基准单元格,偏移行数,偏移列数)

【功能】

是以基准单元格为起始,返回按移动行数、移动列数偏移的单元格的值。

偏移行数,正数表示向下,负数表示向上。

偏移列数,正数表示向右,负数表示向左。

首先,举个非常简单的例子。

➊ 在 Excel 工作表的单元格 C3中输入“100”。

➋ 将下列公式输入任意一个单元格。

=OFFSET(A1,2,2)

输入有上述公式的单元格,将返回“100”。

作为基准单元格的 A1,向下2行、向右2列的目标单元格是 C3(值为100)。所以输有此公式的单元格所返回的值就是100。

将 OFFSET 函数与 MATCH 函数组合

运用这个公式,想办法引用检索列左侧的单元格。

下列表格我们可以看到,按照单元格 E2的数字,在 F2、G2的“课程”和“单价”中会分别对应返回数据。首先,先在 E2里输入1。

首先,F2的“课程”十分简单,通常使用 VLOOKUP 函数就能处理。

=VLOOKUP(E2,B:C,2,0)

在单元格 F2中输入=VLOOKUP(E2,B:C,2,0)后取得“课程”数据

但是,单元格 G2的“单价”数据位于单价的检索列(B 列)的左侧,这样用 VLOOKUP 函数就无法处理了。

这时候,我们可以组合使用 MATCH 函数和 OFFSET 函数。为了导出 E2中“No.”所对应的单价数据,G2中要输入以下公式:

=OFFSET(B1,MATCH(E2,B:B,0)-1,-1)

在单元格 G2中输入=OFFSET(B1,MATCH(E2,B:B,0)-1,-1)

以单元格 B1为基准,作为第二参数的结果的数字向下、再向左移动1格的目标单元格数值将会出现在 G2中。

第二参数的 MATCH 函数,会查找单元格 E2的值位于 B 列的上数第几列。单元格 E2的值若为1,B 列内容为1的单元格位于第2行,因此 MATCH 函数导出结果为“2”。在这个例子中,以单元格 B1为基准的 OFFSET 函数直接嵌入 MATCH 函数中,由于 B1向下偏移数为2,产生了1格的误差,所以需要做出调整,在此基础上减去1。

在 OFFSET 函数中,可以将第二参数的移动行数、第三参数的移动列数指定为负数值。也就是说,可以引用位于基准单元格的上方、左侧的单元格。利用这一特性,可以解决 VLOOKUP 函数无法引用位于检索列左侧单元格的缺陷。

在有多个相同检索值的工作表中使用 VLOOKUP函数的技巧

VLOOKUP 函数会以最初达成一致的检索值单元格作为对象

在 A 列中重复输入了同一家客户公司的名称,B 列中则为相应的负责人的名字。

如果以 A 列和 B 列中的数据为基础,想要在 E 列中按顺序输入相应的负责人,这时使用 VLOOKUP 函数可能会无法得到想要的结果。我们来实际操作一下。

➊ 在单元格 E1中输入以下公式:

=VLOOKUP(D2,A:B,2,0)

➋ 将单元格 E1中的公式一直复制粘贴到第7行。

将单元格 E1中的公式一直复制粘贴到第7行

E 列中的相同的公司对应同一名负责人。例如,ABC 股份有限公司,原本是按铃木、田中、加藤这样的顺序排列,而现在全部变为了“铃木”。

像这样检索值存在重复的情况,VLOOKUP 函数会以从上数、与起始处一致的检索值的单元格为对象来处理数据。单元格 E2、E3、E4也同样如此,都以“ABC 股份有限公司”为检索值,在作为检索范围的 A 列中以最初的单元格 A2为对象运行 VLOOKUP 函数,所以会返回“铃木”这个值。

无重复状态下应加工后再处理

为了解决这个问题,我们可以把有重复数据的 A 列和 D 列中的数据“加工”成唯一的状态,也就是该列下无重复的状态。这里,我们需要重新追加操作用的数据列,再进行处理。

这个方法的原理是,给重复的客户公司名称标上不同的固定编号。

首先,在各个表的左侧分别追加2列,作操作用。

表格左侧分别追加2列,供操作用

表格左侧分别追加2列,供操作用

按照以下步骤,给相同客户公司名称的每个数据分别标上编号。每个公式引用的哪个单元格,进行了怎样的处理,我们一边看一边分析。

➊ 在单元格 A2输入以下公式,一直复制粘贴到第7行。

=COUNTIF($C$2:C2,C2)

※C 列的客户公司名称标上数字

➋ 同样地,单元格 F2输入下列公式,一直复制粘贴到第7行。

=COUNTIF($H$2:H2,H2)

※H 列的客户公司名称标上数字

➌ 在单元格 B2中输入以下结合了固定编号和客户公司名称的公式,一直复制粘贴到第7行。

=A2&C2

➍ 同样地,在单元格 G2输入下列公式,一直复制粘贴到第7行。

=F2&H2

做完以上步骤,在 I 列输入下列 VLOOKUP 函数后,目标单元格中就会自动显示相应的负责人了。

=VLOOKUP(G2,B:D,3,0)

显示个别对应的负责人名称

这个方法的关键在于,用 COUNTIF 函数给每个数据设定编号(出现次数),通过编号与检索值得到新的固定检索值,并将其嵌入 VLOOKUP 函数中,由此就能得出正确结果了。

如何用 VLOOKUP函数应对检索范围中竖列顺序的变动状况

输入表与负责部分的项目顺序不同时

在刚才的例子中,为了让“输入表”与“负责部分”的项目排列顺序保持一致,第三参数按顺序输入2、3、4……这样连续的序号。因此,VLOOKUP 函数第三参数引用嵌入了 COLUMN 函数,这样做会提高效率。

但是,如果像下面这样,输入表与负责部分的项目顺序不同时该怎么办?也就是说第三参数不是连续数字的话,各单元格中的 VLOOKUP 函数即便运用了 COLUMN 函数,也无法得出正确的第三参数。

输入表与负责部分的项目顺序不同时

此例中,D 列的“单价”对应“负责部分”最左端往右数第6列,E 列的“生产者”对应“负责部分”最左端往右数第5列。在这样的前提下,如果想要在单元格 C3中输入最开始的那个函数公式,之后只要复制到 G 列也都可以得出结果的话,我们应该怎么做呢?

在 C 列商品名的单元格输入的 VLOOKUP 函数中第三参数应该是什么数字呢?答案是2。那么,我们只要输入能自动导出数字2的第三参数就可以了。这时候,我们就要用到 MATCH 函数。

我们通过以下例子具体解释一下。

上述例子中,A1到 D1项目名称分别为“商品名”、“单价”、“生产者”、“最低订购单位”,这些项目在 F1到 I1的范围中位于左数第几列,会相应地显示在 A2到 D2中。以单元格 A2为例,“A1(即商品名)的值,在 F1:I1范围里位于左数第2个”,那么 A2中则会显示数字2。

在单元格 A2做出这种处理的是下面的函数公式。

=MATCH(A1,$F$1:$I$1,0)

MATCH 函数中第一参数指定的值,会导出在第二参数指定范围中位于第几位的数字。第三参数基本上“只要输入0就行了”。

在图中,将单元格 A2的公式一直复制粘贴到 D2。因为第一参数不做绝对引用,单元格 B2里被复制粘贴的公式中的第一参数为 B1,单元格 C2里被复制粘贴的公式的第一参数为 C1,D2中则是 D1。

第二参数限定了纵列或横行的范围。

▲指定纵列的范围

第一参数指定的值为在此范围内的上数第几行。

▲指定横行的范围

第一参数指定的值为在此范围内左数第几列。

单元格范围限定为 F1:I1,则呈现如下状态:

  • 单元格 A1即“商品名”位于左数第2个
  • 单元格 B1即“单价”位于左数第4个
  • 单元格 C1即“生产者”位于左数第3个
  • 单元格 D1即“最低订购单位”位于左数第1个

能够在单元格中显示数字2、4、3、1,是因为 MATCH 函数的处理。

在 VLOOKUP 函数的第三参数中加入 MATCH 函数,即使“输入表”与“负责部分”的项目的排列顺序不同,也能够通过 MATCH 函数取得“‘输入表’的各项目名在‘负责部分’下位于第几列”的数字,把这样的结构嵌入 VLOOKUP 函数第三参数中就能够解决顺序不同的问题。在输入表的单元格 C3,请输入以下公式:

=VLOOKUP($B3,$I:$N,MATCH(C$2,$I$2:$N$2,0),0)

然后复制到整个表格,画面则显示如下:

在单元格 C3中输入=VLOOKUP($B3,$I:$N,MATCH(C$2,$I$2:$N$2,0),0)并复制粘贴至全表

分析 MATCH 函数的处理

可能乍一看上述的公式很复杂,接下来我们来仔细分析一下。关键在于理解嵌入 VLOOKUP 函数第三参数的 MATCH 函数是如何发挥作用的。

MATCH(C$2,$I$2:$N$2,0)

这个公式得出的数字指向的是,第一参数指定的单元格 C2的值(即商品名的值)位于第二参数指定范围($I$2:$N$2)的左数第几个。在这一例子中为数字2,它与单元格 C3中以 B3的值(数字1)为检索值的 VLOOKUP 函数里,检索范围 I:N 从左数第几列的对应数字是一致的。

将输有单元格 C3内容的单元格一致复制粘贴到 G6,为了不让参照项移位,需要设定绝对引用。

无需在工作表外填入数据并完成连续输入VLOOKUP函数

在这种情况下,由于“输入表”与“负责部分”各项目的排列顺序相同,VLOOKUP 函数第三参数中指定的数字也要向右递增,显示连续的数字。因此,工作表外的上部不用输入其他数字,也可以完成操作。

想要沿着行的方向输入连续的数字,我们可以使用 COLUMN 函数。利用 COLUMN 函数的特性,并将之嵌套在 VLOOKUP 函数的第三参数里,就可以瞬间完成复杂的操作。

在单元格 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,COLUMN()-1,0)

一直复制粘贴到单元格 G3,Excel 中就会出现如下页面。

在单元格 C3里输入=VLOOKUP($B3,$I:$N,COLUMN()-1,0)并复制粘贴到 G3

第三参数“COLUMN()-1”在 C 列中为2,在 D 列中为3。COLUMN 函数所导出的,是含有 COLUMN()的单元格位于工作表中第几列的数字。

在单元格 C3中输入的 VLOOKUP 函数,其第三参数指定数字为2。由于 C3的 COLUMN()为3,在此基础上减去1后,则调整为2。同理,D 列到 G 列中“COLUMN()”获得的数字减去1就是 VLOOKUP 函数的第三参数,这样就能顺利地计算出正确的项目数值。

VLOOKUP函数:在粘贴的单元格中变为合适的数字

这里需要的并不是把 VLOOKUP 函数的第三参数输入成2或3这样的固定值,而是需要“输入可以在粘贴的单元格里,实时转化为合适的数字”这样的设想。

最简单的就是在表外的上方输入想要指定的第三参数的数字,然后引用这一单元格。例如,在单元格 C1到 G1中,分别输入从2到6的数字,在 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,C$1,0)

将这个公式一直复制粘贴到 G3,显示如下。

在单元格 C3输入=VLOOKUP($B3,$I:$N,C$1,0)并一直复制粘贴到 G3

在单元格 C3输入=VLOOKUP($B3,$I:$N,C$1,0)并一直复制粘贴到 G3

第三参数引用的是同一列的第1行的单元格。也就是说,C 列引用2,D 列引用3,如此自动改变数值。这样就不用在每个单元格里逐个输入 VLOOKUP 函数的第三参数了,从而大大减轻了工作负担。

沿行方向输入大量VLOOKUP函数的方法:批量修改单元格

如果遇到像下图这样,需要输入大量的 VLOOKUP 函数,按照常规的方法处理需要花费大量的时间和精力。

“输入表”中的各个单元格里,按照“商品 No.”在“负责部分”中用 VLOOKUP 函数找出对应值。首先用常规的方法,在最开始的单元格 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,2,0)

将单元格 C3的公式向右一直复制到 G 列,为了不改变从属单元格,需要用绝对引用来固定第一参数的检索值和第二参数的检索范围。

在单元格 C3输入=VLOOKUP($B3,$I:$N,2,0)后

接着将它一直拖拽复制到单元格 G3。画面显示如下:

将单元格 C3一直拖拽复制到单元格 G3

所有单元格中的数据都已经变成了相同数值。这是因为从单元格 C3到 G3,每个单元格中的函数如上变为了第三参数“2”。参考的是检索范围 I:N 列最左端开始数第2列的值。

因此,如果要让 C3到 G3中的每个单元格都显示各自所属正确的数值,就必须修改各单元中的 VLOOKUP 函数的第三参数。C3中 VLOOKUP 函数第三参数改为“2”、D3改为“3”、E3改为“4”、F3改为“5”、G3改为“6”,这样每个单元格中的数值才是正确的。

像这样逐个修改还是很麻烦的。像前文中的例子那样,如果需要修改的单元格只有4个,那么不会花费很多时间。但是工作中需要输入 VLOOKUP 函数和修改第三参数的单元格有时会多达50列。遇到这种情况,千万不要动手逐个去修改。我告诉大家一个便捷的办法,甚至可以不用逐个修改单元格。

Excel中输入连续的数字:在工作表中沿行方向输入连续的数字

那么,如果想要在工作表中沿行方向,即向右方输入连续的数字,应该怎么做呢?这时,我们可以使用 COLUMN 函数。COLUMN 函数的意义在于,在输入如下内容的单元格中,能够得出该单元格位于工作表的左数第几列。

【公式】

=COLUMN()

例如,在单元格 B1中输入这一函数会得到2。

在单元格 B1中输入=COLUMN()

在单元格 B1中输入=COLUMN()

单元格 B1位于 B 列,即工作表的左数第2列。因此得出数字2。

如果继续向右拖拽复制,就会开始从2连续输入数字。

要想从1开始连续输入的话,与 ROW 函数同理,减去数字做相应调整就行。

➊ 在单元格 B1输入下列公式后,按回车键。

=COLUMN()-1

➋ 将单元格 B1向右方拖拽复制,出现连续的数字。

将单元格 B1向右方拖拽复制,出现连续的数字

通过 ROW 函数、COLUMN 函数在工作表中输入连续的数字,可运用在以下的需求中。

  • 在表格中隔行标注2种不同颜色
  • 输入连续的阿拉伯数字
  • 快速沿行方向输入大量 VLOOKUP 函数

在这之后,我会逐个具体说明。

Excel中输入连续的数字:如何连贯输入连续的数字

前两篇介绍的2种方法有个前提,就是所有输入单元格的数字要为固定值,因此如果删去中间某一行或者插入一行,连续的数字就从中间断开了。要想在这种情况下也让数字保持连贯,我们可以使用 ROW 函数。无论删掉还是穿插一行单元格,都可以保持数字的连贯,不需要逐个修改。

输入下列公式的单元格,会显示“该单元格位于工作表中的第几行”的数据。

【公式】

=ROW()

括号中不要输入任何内容。请记住像这样在函数括号中不输入任何参数的方法(比如 TODAY 函数、NOW 函数等)。

例如,在单元格 A2中输入这个函数,单元格 A2中会显示2。由于单元格 A2位于工作表中的第2行,因此数字2代表的是这个行数。

在单元格 A2中输入=ROW()

在单元格 A2中输入=ROW()

如下图所示,直接向下拖拽复制,从2开始的连续。

从单元格 A2向下拖拽复制

各单元格“=ROW()”这个公式导出的数字,这个数字表示该单元格所处的行数,所以会在单元格中显示连续的号码。

但是通常来说,连号都是从1开始。因此,需要在这个 ROW 函数中做减法。例如,想从第2行(这里是单元格 A2)开始输入连续的数字时,请输入下列公式。

=ROW()-1

在单元格 A2输入=ROW()-1

按回车键,ROW()取得的行数2再减去1,显示结果得到1。

显示结果为1

将此单元格向下拖拽复制,各单元格中就会出现连续的数字。

将单元格 A2向下方拖拽复制

这里的连续的数字,按照各单元格中的 ROW 函数取得的该单元格时所在的行数,因此就算中间删除或添加一行单元格,都会从1开始保持数字的连贯。