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“”。
希望这可以帮助