在我的第一个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。
答案 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公式。用逗号分隔标准是一个坏主意。
编辑:实际上,为什么不使用几十列? 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)
答案 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)
迟到总比没有好,对吗?我加两分钱。
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