我有一个我正在使用的公式,它工作得很好,但我想把它清理干净。
=SUMIF(IB02R, A56, IB02P)+SUMIF(IB03R, A56, IB03P)+SUMIF(IB04R, A56, IB04P)IB02R、IB03R、IB04R & IB02P、IB03P、IB04P是我在名称管理器中定义的范围。它们会查看整行。
IB02R查看另一个工作表的B4-ND4 IB02P查看另一个工作表的B5-ND5
诸若此类。
以下是原始公式:
=SUMIF('2014'!$A$4:$ND$4,A75,'2014'!$A$5:$ND$5)+SUMIF('2014'!$A$7:$ND$7,A75,'2014'!$A$8:$ND$8)+SUMIF('2014'!$A$10:$ND$10,A75,'2014'!$A$11:$ND$11)
我想简化一下,将所有的R和P组合起来,这样我就可以使用=SUMIF(IB0234R, A56, IB0234P),而不是3个sumif语句。其中IB0234R和IB0234P是IB02R中包含的范围,依此类推。
该公式是查找特定单元格与3个不同行中的每个单元格之间的匹配。第4、7和10行。
如果在这些行中的任何位置都有匹配,它将分别求和第5行、第8行和第11行中的相应值。
我的两个公式都有效,但为了可读性和清晰度,我想简化一下。
这个是可能的吗?我尝试了几种不同的方法,但都没有成功。
发布于 2014-08-12 23:42:33
仅供参考,我非常喜欢Rick的答案,但我承认他所做的对我来说是新的(这就是为什么我喜欢这个网站!!),所以我只知道如何使用来做这件事。
对于VBA,可用于执行此操作的函数如下所示:
Function Disjoined_SumIf(CriteriaRange As Range, Criteria As Range, SumRange As Range) As Double
Dim ar As Integer
Dim cl As Integer
For ar = 1 To CriteriaRange.Areas.Count
For cl = 1 To CriteriaRange.Areas(ar).Cells.Count
If CriteriaRange.Areas(ar).Cells(cl).Value = Criteria.Value Then Disjoined_SumIf = Disjoined_SumIf + SumRange.Areas(ar).Cells(cl).Value
Next cl
Next ar
End Function并且您可以在电子表格中将其用作=Disjoined_SumIf(IB0234R, A56, IB0234P)
此函数将基于以下假设工作:
函数崩溃
这是一个快速而肮脏的解决方案,可以在其上构建以使其更加健壮,但它将会工作!!
所以,再说一次,我肯定会采用Rick的解决方案,但为了完整起见,我添加了这个。
https://stackoverflow.com/questions/25249467
复制相似问题