Excel:执行SUMIF,其中条件是以逗号分隔的列表

时间:2016-08-05 00:16:33

标签: excel excel-formula

在我的第一个Excel工作表中,我有一个ID和值表:

ID  VALUE
1   30
2   35
3   14
4   92

在我的第二个工作表中,我将在一列中提供以逗号分隔的ID列表,在第二列中,我想要计算这些ID值的总和,如下所示:

IDs     SUM
1,2     65
2,3,4   141
3       14

如何编写第二个工作表的SUM列的公式?如果可能,我想避免使用VBA。

6 个答案:

答案 0 :(得分:4)

假设您为示例表提供:

1)您的源表位于Sheet1!A1:B5范围内(第1行中包含标题)

2)您的结果表位于Sheet2!A1:B4范围内(第1行中包含标题)

3)结果表A列中条目的分隔符只是一个逗号

然后,在Sheet2!B2数组公式 **:

=SUM(IF(ISNUMBER(FIND(","&Sheet1!A$2:A$5&",",","&A2&",")),Sheet1!B$2:B$5))

向下复制到B4

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。

答案 1 :(得分:1)

考虑使用列而不是逗号分隔条件,然后您可以简单地添加几个Sumif公式。用逗号分隔标准是一个坏主意。

enter image description here

编辑:实际上,为什么不使用几十列? Excel有很多,所以让我们使用它们。将逗号分隔列表放入列中。甚至可能在另一张纸上。使用“文本到列”将值分隔为单个列。允许一百。然后为每列添加一百个具有单个sumif公式的列。在最右边,使用总和公式来计算所有sumif语句。

您可以使用VBA执行“文本到列”操作,并使用拆分值隐藏列,使用公式隐藏列,这样您就会在列旁边显示一个列,其中包含各自的总计。

答案 2 :(得分:0)

您可以使用用户定义的功能来实现此目的。

Function GetSum(r As String) As Long
    Dim str1, str2
    Dim ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    Dim d As Long
    str1 = Split(r, ",")
    str2 = UBound(str1)
    For i = 0 To str2
        d = d + WorksheetFunction.SumIf(ws1.Range("A:A"), str1(i), ws1.Range("B:B"))
    Next i
    GetSum = d
End Function

假设您在sheet1和sheet 2中的数据都以A2开头 在Worksheet2 B2中应用以下公式

=getsum(A2)

enter image description here

答案 3 :(得分:0)

您可以随时隐藏teylyns aswer中的colums,并将这些隐藏的列连接在一个单独的列中。

或者在隐藏的列中使用公式,例如:left(right($ G2,len($ G2)-2),1)。当你进入下一列时,右()公式中的负2应该从0到2等4。在G列中,用户可以指定ID,如“1,2,3”。如果len() - 使用0值为负值,你还需要一个if函数。也许也是用“”替换“”的功能。

希望这有帮助

答案 4 :(得分:0)

迟到总比没有好,对吗?我加两分钱。

enter image description here

E2中的公式:

=SUMPRODUCT(SUMIF(A$2:A$5,FILTERXML("<t><s>"&SUBSTITUTE(D2,",","</s><s>")&"</s></t>","//s"),B$2:B$5))

向下拖动。

答案 5 :(得分:-1)

您可以使用:

=SUMPRODUCT(ISNUMBER(FIND(","&A$2:A$5&",",","&D3&","))*$B$2:$B$5)

没有 CTRL SHIFT ENTER