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

在我的第一个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。

假设,对于你给的例子表格:

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

问候

**数组公式不是以与“标准”公式相同的方式input的。 按住CTRL键和SHIFT键,而不是按下ENTER键,然后按ENTER键。 如果你做得对,你会注意到Excel在公式周围放置了大括号(尽pipe不要试图自己手动插入这些)。

考虑用列而不是逗号分隔标准,那么你可以简单地加起来一些Sumif公式。 逗号分隔标准是一个坏主意。

在这里输入图像说明

编辑:其实,为什么不使用数十列? Excel有很多,所以让我们使用它们。 将逗号分隔列表放入列中。 甚至可能在另一张纸上。 使用“文本到列”将值分隔成单独的列。 允许一百。 然后为每列添加一个具有单个总和公式的列。 在正确的情况下,使用总和公式来计算所有的总和报表。

您可以使用VBA来执行“文本到列”事物,并使用分隔值和具有公式的列来隐藏列,这会在列和列各自的总计旁边留下一个逗号分隔值列。

您可以使用用户定义的function来实现这一点。

 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和Sheet2中都以A2开头,那么在Worksheet2B2中应用下面的公式

 =getsum(A2) 

在这里输入图像说明

你总是可以将这些柱子隐藏起来,并把这些隐藏的柱子连在一起。

或者在隐藏的colums中使用一个公式:left(right($ G2,len($ G2)-2),1)。 在进入下一列时,右边()公式中的减号2应该从0到2等于4等等。 在G列中,用户可以指定诸如“1,2,3”的ID。 如果len() – 如果使用0值则为负值,您还需要一个if函数。 也许还有一个function,用“”replace“”。

希望这可以帮助