COUNTIFS函数如何处理以数组方式提供的条件

COUNTIFS函数如何处理以数组方式提供的条件

浏览次数:1125次
信息来源: 银河系资源网
更新日期: 2022-05-06
文章简介

这篇文章将详细讲解COUNTIFS/SUMIFS函数的运行原理,特别是将包含多个作为条件的元素的数组传递给一个或多个Criteria_Range参数时。先看一个示例,如下图1所示的数据。图1现在,想要得到Sex为“Male”,Pet为“Sea l...

这篇文章将详细讲解COUNTIFS/SUMIFS函数的运行原理,特别是将包含多个作为条件的元素的数组传递给一个或多个Criteria_Range参数时。

先看一个示例,如下图1所示的数据。

图1

现在,想要得到Sex为“Male”,Pet为“Sea lion”的数量,使用公式:

=COUNTIFS(B2:B14,”Male”,C2:C14,”Sea lion”)

而想要得到Sex为“Female”,Pet为“Sea lion”的数量,可使用公式:

=COUNTIFS(B2:B14,”Female”,C2:C14,”Sea lion”)

那么,想要得到Sex为“Male”或“Female”,Pet为“Sea lion”的数量,可简单地将上述两个公式相加:

=COUNTIFS(B2:B14,”Male”,C2:C14,”Sealion”)+COUNTIFS(B2:B14,”Female”,C2:C14,”Sea lion”)

此时,我们可能会想到,使用数组作为参数来简化上面的公式:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,”Sealion”))

这将得到同样的结果5。

下面,我们再添加一个OR条件:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,{“Sealion”,”Mite”}))

结果为2。本来我们预测的结果应该是7,可实际比上一个公式得到的结果5还要少。其实,这个公式返回的结果是:列B中是“Male”且列C中是“Sea lion”或者列B中是“Female”且列C中是“Mite”的数量。从图1所示的表中可以看到,仅第12行和第14行满足条件。

对于这个公式,要注意的重要一点是:两个常量数组中的每个元素彼此对应,“Male”和“Sea lion”以及“Female”和“Mite”。该公式并未考虑B列中的“Male”和C列中的“Mite”是可选项,也未考虑B列中的“Female”和C列中的“Sea lion”。

但是,如果我们想考虑这些交叉选项,那么怎样才能统计所有可能对应的条件?列B中是“Male”或“Female”而列C中是“Sea lion”或“Mite”,得出满足条件的数量为7的结果。

此时,只需要对上一个公式做个小小改变:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,{“Sealion”;”Mite”}))

或者:

=SUM(COUNTIFS(B2:B14,{“Male”;”Female”},C2:C14,{“Sealion”,”Mite”}))

只是将其中一个常量数组中的逗号改为分号。

这里,一个常量数组是单列数组,另一个是单行数组,这使得Excel返回一个由这两列数组的所有可能组合组成的一个二维数组,等同于下图2所示。

图2

然后,对这四种情形所得到的结果求和。

下面,我们再来扩展一下,公式:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,{“Sealion”;”Mite”},D2:D14,{“Basketball”}))

计算列B中是“Male”或“Female”、列C中是“Sea lion”或“Mite”且列D中是“Basketball”的数量,结果为1。

现在,如果我们试图给列D再添加一个条件,看看会发生什么。公式:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,{“Sealion”;”Mite”},D2:D14,{“Basketball”,”Genealogy”,”Roleplaying”}))

可能想要返回下图3所示的5行:

图3

然而,上述公式的结果为2。

是语法错误吗?那么试试:

=SUM(COUNTIFS(B4:B16,{“Male”,”Female”},C4:C16,{“Sealion”;”Mite”},D4:D16,{“Basketball”;”Genealogy”;”Roleplaying”}))

返回的结果是0。

这到底是怎么回事?

让我们看看前面的这个公式:

=SUM(COUNTIFS(B2:B14,{“Male”,”Female”},C2:C14,{“Sealion”;”Mite”},D2:D14,{“Basketball”,”Genealogy”,”Roleplaying”}))

将会转换为:

=SUM({0,1,0;1,0,0})

其中间结果为一个由2行3列组成的数组。这个数组是怎么来的?

这里的关键是之前提到的元素“配对”。当两个(或多个)数组具有相同的“向量类型”(即要么都是单列数组,要么都是单行数组)时,Excel将对每个数组中相对应条件进行配对。因此,在上面的公式中第一个数组{“Male”,”Female”}和第三个数组{“Basketball”,”Genealogy”,”Roleplaying”}都是单行数组,Excel将配对这些元素:第一个是有多少是列B中为“Male”并且列D中是“Basketball”,第二个是有多少是列B中为“Female”并且列D中是“Genealogy”。

注意到还有另一个数组{“Sea lion”;”Mite”},那是一个单列数组,这将会让我们能够构造一个二维数组。

并且,第三个数组中的第三个元素“Roleplaying”在第一个数组中并没有相配对的元素。

然而,Excel会继续构建适当大小的数组以容纳预期的返回值,即上面看到的2行3列的数组。实际上,对于两个(或更多个)不同维度的数组,Excel解决冲突的方法是人为地增加两个中的较小者,以便使其尺寸等于这些数组中的较大者。

它是使用零填充这些新创建的多余空间,然后根据需要对结果数组进行操作。下面,可以给出一个与上面中间结果{0,1,0;1,0,0}的等效表达式,其分解起来如下图4所示。

图4

可以看出,先将三个数组中相同向量类型配对,然后与第三个数组交叉计算得到结果。

再看看前面想得到结果的第二个公式:

=SUM(COUNTIFS(B4:B16,{“Male”,”Female”},C4:C16,{“Sealion”;”Mite”},D4:D16,{“Basketball”;”Genealogy”;”Roleplaying”}))

我们可以预料到中间结果是:

=SUM({0,0;0,0;0,0})

这次是3行2列数组,由6个元素组成。此时,相同向量类型的数组分别是第二个数组{“Sea lion”;”Mite”}和第三个数组{“Basketball”;”Genealogy”;”Roleplaying”},因此配对如下:”Sea lion”/” Basketball”、”Mite”/”Genealogy”、”???”/”Roleplaying”。

这三组数据和第一个数组{“Male”,”Female”}交叉运算的结果如下图5所示。

图5

小结

尽管本文的主要目的是讨论SUMIFS/COUNTIFS函数系列的操作和语法,但学习到的更重要的方面是对基本方法更深刻的理解之一是通过这种结构来计算。

有许多的Exceller,其工作清楚地表明了他们对标准公式技术的理解:使用FREQUENCY非常容易;编写出长而复杂的数组公式;会记住经过实践检验的成熟的解决方案;善于在各种情况下使用绝大多数Excel函数。

但是你不会看到来自同一个人的许多MMULT,而且也不会看到许多非标准的、创新的数组操作(在MMULT之后,也许TRANSPOSE居于最少使用和了解最少的函数的之首)。但是,这两个函数从本质上讲具有相同的基本方面,也就是说,它们辅助我们处理要操纵的二维数组。不是像工作表单元格区域那样的那些可见的东西,而是那些仅位于Excel中间计算链深度之内并且是临时的东西。

此时,最重要的是,我们要了解可以操纵、查询甚至重新定义这些二维数组构造的基本方法。然而,我们当中有多少人对这些基本原理如此了解?就像为什么这么少的人在解决方案中使用MMULT?

标签: 暂无标签
excel公式教程: 找到和的加数
« 上一篇
excel公式教程: 求一列中的数字剔除掉另一列中的数字后剩下的数字
下一篇 »
  • 如何计算同一单元格中的Excel数据的公式和?
    750476阅读
    在某些表格中,我们需要将所有数据输入到一个单元格中来计算公式,而通用公式是在不同的单元格中计算的。我们应该如何计算这种情况?在这里,小王先生将与大家分享几种常用的方法。1.用户定义的名称首先,输入公式定...
  • 按日期记录的产品销量,SUMIFS帮你按月统计
    703294阅读
    今天,朋友传来EXCEL文件,内有两张工作表,一张是按照日期记录的商品销量,另一张是按月统计的模板,请帮忙统计每种产品的月销量。商品销量记录表:按月统计的模板:关键操作第一步:TEXT函数建立辅助列在日期列前插...
  • excel从字符串中提取数字——数字位于字符串开头
    280928阅读
    本文主要研究从字符串开头提取数字的技术:1. 这些数字是连续的2. 这些连续的数字位于字符串的开头3. 想要的结果是将这些连续的数字返回到单个单元格对于下面研究的每种解决方案,我们需要在两种不同的情况下测试其健...
  • excel按类别分页打印,有时需要强制
    129536阅读
    今天,就有位朋友提出一个很实用的问题:有时候需要按照类别打印,比如以下数据样表,需要按地区分页打印:怎么办?两种方法:一、筛选后打印这种方法,可能大家都会用到:先按照不同地区筛选,筛选一次打印一次。如...
  • Excel表格日期公式和快捷技巧教程
    100566阅读
    Excel表格日期公式和快捷技巧教程1.excel日期的快捷键方法。首先,让我们介绍快捷键的方法(不需要公式)。方法很简单,在细胞里,同时按两个快捷键:Ctrl你可以得到当前日期。注意:1)不需要输入号码。2)其中;在英文...
  • excel公式教程:找到和的加数
    79919阅读
    有时候,我们给出一个目标值,想要知道这个值是已经提供的一系列值中哪几个值的和。如下图1所示,在单元格A2中给出了目标值47,在单元格C1:K1中有9个值,现在我们想知道这些值中哪些值相加等于47,在这些值的下方单元...
  • Excel中F8键的妙用
    47136阅读
    键盘上的键有什么用呢?今天我们一起来看看键在excel表中能发挥什么作用呢?1、使用F8键的功能选取单元格区域:比如:我要选中区域B2:D7这还不简单啊,直接用鼠标选取就行啦,对,没错,但是除了使用鼠标直接选取外,...
  • Excel中Rank函数排名
    31805阅读
    EXCEL中有一个很神奇的函数“RANK”,他能够将数字的排名单独显示在另一列,而且可以去除重名次。所显示的结果是有多少人就显示多少名。下面小编就来与大家分享一下,希望对大家有点帮助。1.返回一列数字的数字排位。...
  • “Excel批处理”成批修改文件名 以帮助您组织文件!
    31451阅读
    操作方法步骤1:首先定义名称,引用位置是[=FILES(‘D:\ my folder \ *。docx ‘)];自己设置驱动器号路径!查看您需要组织文件夹的位置,并设置它!然后,在单元格A1中输入[=INDEX(名称,行(A1))]的引...
  • Excel一学就会的饼图制作技巧
    20271阅读
    如何用饼图来展示任务完成百分比。先看效果:要实现这样的效果,其实很简单,接下来咱们就看看具体的操作过程:步骤1 准备数据源B1单元格中输入完成率,B2单元格中输入公式计算剩余量:=1-B1步骤2 插入饼图步骤3 设置...

如本文对您有帮助,随意赞赏一下!