2

我有一个 Excel 文档,它有一个日期列 (A) 和一个包含字符串 (B) 的列,一张一张。在另一张纸上,我正在计算。如果 A 列中的单元格介于 DATE(2012,1,1) 和 DATE(2012,6,1) 之间,并且 B 列中的同一行在任何部分(字符串)中包含“字符串”,那么它应该计算该行。谷歌提到使用 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"&"*"))

编辑:显然上述工作,但字符串必须等于该值。* 未被识别为通配符。

谢谢。

4

4 回答 4

3

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

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

于 2012-12-26T18:17:22.940 回答
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)))

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

于 2012-12-26T17:51:12.890 回答
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))))
于 2012-12-26T18:10:23.550 回答
0

您使用的是哪个版本的 Excel?如果是2007或者以后的,可以使用COUNTIFS;这是语法的链接。 您可能必须使用两列,即使使用 COUNTIFS。在 Sheet2 上,A 列应使用以下公式检查 Sheet1、B 列是否包含“字符串”:

=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.
于 2012-12-26T17:46:19.613 回答