首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个不连续的范围合并为一个命名范围,以清理公式

将多个不连续的范围合并为一个命名范围,以清理公式
EN

Stack Overflow用户
提问于 2014-08-12 01:54:22
回答 1查看 17.2K关注 0票数 2

我有一个我正在使用的公式,它工作得很好,但我想把它清理干净。

代码语言:javascript
复制
=SUMIF(IB02R, A56, IB02P)+SUMIF(IB03R, A56, IB03P)+SUMIF(IB04R, A56, IB04P)

IB02RIB03RIB04R & IB02PIB03PIB04P是我在名称管理器中定义的范围。它们会查看整行。

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语句。其中IB0234RIB0234PIB02R中包含的范围,依此类推。

该公式是查找特定单元格与3个不同行中的每个单元格之间的匹配。第4、7和10行。

如果在这些行中的任何位置都有匹配,它将分别求和第5行、第8行和第11行中的相应值。

我的两个公式都有效,但为了可读性和清晰度,我想简化一下。

这个是可能的吗?我尝试了几种不同的方法,但都没有成功。

EN

回答 1

Stack Overflow用户

发布于 2014-08-12 23:42:33

仅供参考,我非常喜欢Rick的答案,但我承认他所做的对我来说是新的(这就是为什么我喜欢这个网站!!),所以我只知道如何使用来做这件事。

对于VBA,可用于执行此操作的函数如下所示:

代码语言:javascript
复制
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)

此函数将基于以下假设工作:

  1. 条件范围的拆分方式与求和范围的拆分方式相同(在本例中是如此)
  2. 它不会考虑求和范围中的非数值数据,这会导致

函数崩溃

这是一个快速而肮脏的解决方案,可以在其上构建以使其更加健壮,但它将会工作!!

所以,再说一次,我肯定会采用Rick的解决方案,但为了完整起见,我添加了这个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25249467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档