具有多个if要求的Excel Countif

时间:2012-12-26 16:52:06

标签: excel date countif

我有一个Excel文档,其中包含一个日期列(A)和一个包含字符串(B)的列。在另一张纸上,我正在做计算。如果A列中的单元格介于DATE(2012,1,1)和DATE(2012,6,1)之间,则B列中的同一行在任何部分( string )中包含“string”,则它应该计算那一行。谷歌提到使用SUMPRODUCT,但我只能在工作之间得到日期。以下是日期之间的SUMPRODUCT。

=SUMPRODUCT(--('Sheet1'!A:A>=DATE(2012,1,1)),--('Sheet1'!A:A>=DATE(2012,6,1)))

我尝试使用它作为最终值,但它不正确。

=SUMPRODUCT(--('Sheet1'!A:A>=DATE(2012,1,1)),--('Sheet1'!A:A>=DATE(2012,6,1)),--('Sheet1'!B:B="*"&"string"&"*"))

编辑:显然上面的工作,但字符串必须与值EQUAL。 *未被识别为通配符。

感谢。

4 个答案:

答案 0 :(得分:3)

如果您在SUMPRODUCT中使用整列,则必须使用Excel 2007或更高版本(否则不起作用),并且可以在COUNTIFS中使用通配符

=COUNTIFS('Sheet1'!A:A,">="&DATE(2012,1,1),'Sheet1'!A:A,"<="&DATE(2012,6,1),'Sheet1'!B:B,"*String*")

答案 1 :(得分:1)

您遇到的问题是由于您无法在SUMPRODUCT中以这种方式使用通配符。一种可以绕过它的方法(假设您需要使用SUMPRODUCT)是使用SEARCHFIND创建必要的数组以在SUMPRODUCT中使用。以下是在单元格D1中包含目标字符串的示例(请注意,这需要作为带Ctrl+Shift+Enter的数组公式输入):

=SUMPRODUCT(
    --(Sheet1!A:A>=DATE(2012,1,1)),
    --(Sheet1!A:A<=DATE(2012,6,1)), 
    IFERROR(IF(SEARCH(D1,Sheet1!B:B)>0,1,0),0))

IFERROR说明不匹配但是Excel 2007功能。如果您不使用Excel 2007,可以尝试:

=SUMPRODUCT(
    --(Sheet1!A:A>=DATE(2012,1,1)),
    --(Sheet1!A:A<=DATE(2012,6,1)),
    IF(ISERROR(IF(SEARCH(D1,Sheet1!B:B)>0,1,0)),0,IF(SEARCH(D1,Sheet1!B:B)>0,1,0)))

此外,在您的示例公式中,您需要在6月的比较中将符号切换为<=:)

答案 2 :(得分:1)

Sumproduct不允许使用通配符。您可以使用ISNUMBER搜索字符串(SEARCH(“string”,range))。公式如下。

=SUMPRODUCT(--('Sheet1'!A:A>=DATE(2012,1,1)),--('Sheet1'!A:A<=DATE(2012,6,1)),--(ISNUMBER(SEARCH("string",'Sheet1'!B:B))))

答案 3 :(得分:0)

您使用的是哪个版本的Excel?如果是2007或更高版本,则可以使用COUNTIFS; here is a link to the syntax.您可能必须使用两列,甚至使用COUNTIFS。在Sheet2上,A列应使用以下公式检查Sheet1,B列是否包含“string”:

=IF(ISERR(FIND("string",'Sheet1'!B1)), FALSE, TRUE)

您需要将'Sheet1'!B1替换为您需要的任何单元格,然后将其向下拖动以使其与Sheet1,B列具有相同的行数。然后您可以使用COUNTIFS:

=COUNTIFS('Sheet1'!A:A, ">=" DATE(2012,1,1), 'Sheet1'!A:A, ">=" & DATE(2012,6,1), A:A, TRUE.