我有一个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。 *未被识别为通配符。
感谢。
答案 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
)是使用SEARCH
或FIND
创建必要的数组以在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.