我正在使用Excel中的一个函数,如果列前面的列包含单词“pre”,我可以对列进行求和
这是一个模拟电子表格:
Grade Points Possible
C++ Pre Test 20 20
Homework Week 1 30 30
C++ Test 90 100
现在我想使用SUMIF()函数和嵌套在其中的SEARCH()函数来检查单元格A2到A4,如果找到单词“pre”,它将在B列中对相应的数字求和。
到目前为止,我所拥有的似乎并不起作用:
=SUMIF(A2:A4,SEARCH("pre",A2:A4),B2:B4)
我打算这样说“如果在a2:a4范围内的任何单元格中找到'pre'一词,请从b列中的相应等级中提取值”。我希望模拟电子表格的输出为'20',因为预先只显示一次。
也许VB宏会按顺序排列?
编辑:经过进一步调查,LOOKUP()函数可能是最合适的,因为SEARCH()用于从它正在搜索的列中返回一个值。
答案 0 :(得分:3)
=SUMIF(A2:A4, "=*pre*",B2:B4)
答案 1 :(得分:1)
以上不起作用。如果数组超过2(我知道它是)你可以在sumproduct函数最多30次迭代上扩展它
=SUMPRODUCT(B2*IF(ISERROR(SEARCH(" Pre ",A2)),0,1),B3*IF(ISERROR(SEARCH(" Pre ",A3)),0,1))
如果您使用sum
或sumproduct
并且30是最大值,我确实看不出任何差异,您只需像=SUM() + SUM()
这样的倍数就会生成60。
另一种选择是使用列C
并将其惰性化为C1
并将其复制下来
=IF(ISERROR(SEARCH(" Pre ",A1)),"",B1)
并在最后总结。
下一个选项就像你提到的那样 - 一个用于i的滚动总和的宏,下一个
答案 2 :(得分:0)
拆开你的公式。
=Search("Pre",A2)
返回5 - 我认为你在你的总结中不想要那个。
请改为尝试:
创建一个新列D
,在列A
中查找“pre”一词。也许类似于=iferror(Search("Pre",A2),1,0))
[如果Pre存在于该单元格中,则返回1,否则返回0]
现在sumproduct(B:B,D:D)
应该为您提供预测试所获得的积分,sumproduct(C:C,D:D)
应该为您提供积分。