约翰有一个工作表,其中包含成本跟踪系统中使用的记录。在A列中输入记录号,在B列中输入位置,在C列中输入成本。并非所有记录在C列中都输入了成本值。John希望确定“位置X并且成本<> 0”的记录数。

您的第一个冲动可能是使用设计用于计数的工作表函数之一,例如CountIf。唯一的问题是CountIf不允许在计算解决方案时检查两个条件。但是,可以使用两种解决方案,而无需添加其他列或中间计算。

第一个(也许是最简单的)解决方案是使用SUMPRODUCT工作表功能。此功能使您可以根据需要使用多个条件来对列,行或数组中的数据进行计数或求和。基本语法如下:

=SUMPRODUCT( (CONDITION1)  (CONDITION2)  (CONDITION3) * (DATACELLS) )

在这种特殊情况下,您可以像这样将公式放在一起:

=SUMPRODUCT((B2:B101="X")*(C2:C101>0))

这是提供两个不同的条件进行检查。

首先,检查B列中的单元格以查看它们是否等于“ X”,然后检查C列中的相应单元格以查看它们是否等于0。这两个条件都返回True(1)或False(0)。然后,将这些结果彼此相乘,得出1或0。然后,SUMPRODUCT函数将它们相加,得出累加计数。

另一个解决方案是创建一个数组公式,该公式将为您进行计算。数组公式与常规公式不同,它们在多个单元格上工作,并遍历它们以产生结果。请考虑以下公式:

=(B2="X")*(C2>0)

这将返回一个值为1或0的值。该公式使用与SUMPRODUCT解决方案的先前解释中所述的相同基本逻辑。这两个逻辑比较返回1或0,它们相互相乘,得出1或0作为答案。现在,考虑以下公式:

=SUM((B2:B101="X")*(C2:C101>0))

现在看起来非常像早期的SUMPRODUCT公式,但是它不能作为纯公式正常使用。这是因为SUM并非旨在以迭代方式在一系列单元格上工作。如果将此公式作为数组公式输入(按Shift + Ctrl + Enter进行输入),则Excel会理解您要遍历每个范围,以得出最终的总和,即得出的总记录数符合规定的标准。

使用数组公式的不同方法是一个广泛的话题。

有关数组公式如何工作的更多信息,请参见_WordTips,_的其他问题或参考以下网站:

http://www.cpearson.com/excel/ArrayFormulas.aspx

第三种选择是使用数据库工作表函数返回计数。使用这些,您可以在工作表中设置一个“条件表”,然后该函数使用条件来分析记录。以下步骤假定三列的列标签分别为RecNum,Location和Cost:

。在与记录相同的工作表上或在不同的工作表上找到一些空单元格。 (为了这个示例,我假设您使用的是列J和K。)

。在单元格J1中,输入单词Location。

。在单元格K1中,输入费用一词。

。在单元格J2中,输入X。 。在单元格K2中,输入> 0。现在,您已经在单元格J1:K2中输入了标准表。

。选择单元格J1:K2。

。从“插入”菜单中选择“名称”,然后选择“定义”。 Excel将显示“定义名称”对话框。 (请参见图1。)

。输入名称条件,然后单击确定。

。在要满足条件的记录数的单元格中,输入以下内容:

=DCOUNT(B1:C101,2,Criteria)

请注意,与DCOUNT一起使用的第一个参数是记录列表的第二和第三列。此参数还包括列标签,这是必需的,以便DCOUNT可以从条件表中找到适当的条件匹配项(第三个参数)。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2815)适用于Microsoft Excel 97、2000、2002和2003。