Excel中如何对以capex_开头的命名单元格求和?(已试INDIRECT无效)
Excel中按条件对指定命名单元格求和的解决方案
你用=SUM(INDIRECT("capex_*"))失败的原因很直接:INDIRECT函数不支持用通配符批量引用多个命名单元格,它只能解析单个明确的名称字符串。下面给你两种适配不同Excel版本的解决方法,精准满足你的需求——对D列中名称以capex_开头的单元格求和,同时排除含"小计"、"总计"、"replacement capex"的项。
方法1:Excel 365/2021及以上版本(推荐,动态数组支持)
用FILTER配合SUM实现精准筛选求和:
=SUM(FILTER( INDIRECT(TEXTJOIN(",", TRUE, GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))))), LEFT(GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))), 6) = "capex_" * ISERROR(SEARCH("小计", GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))))) * ISERROR(SEARCH("总计", GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))))) * ISERROR(SEARCH("replacement", GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))))) ))
关键逻辑:
GET.NAME(0):返回当前工作簿中所有命名单元格的总数ROW(INDIRECT("1:"&GET.NAME(0))):生成遍历所有名称的序列LEFT(...,6)="capex_":精准匹配名称以capex_开头的项(前6个字符)ISERROR(SEARCH(...)):排除名称中包含指定关键词的项TEXTJOIN:把符合条件的名称拼接成INDIRECT可识别的引用格式,最后用FILTER筛选值并求和
方法2:全版本兼容方案(无动态数组也能用)
用SUMPRODUCT实现多条件判断求和:
=SUMPRODUCT( --(LEFT(GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0)))),6)="capex_"), --(ISERROR(SEARCH("小计",GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0))))))), --(ISERROR(SEARCH("总计",GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0))))))), --(ISERROR(SEARCH("replacement",GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0))))))), INDIRECT(GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0))))) )
关键逻辑:
--:把逻辑判断的TRUE/FALSE转为1/0,只有所有条件都满足(乘积为1)时,才会累加对应单元格的值- 其余逻辑和方法1一致,通过遍历所有名称筛选符合要求的项并求和
额外提示
如果需要严格限定只计算D列的命名单元格,可以在条件中加入--(CELL("col", INDIRECT(GET.NAME(ROW(INDIRECT("1:"&GET.NAME(0))))))=4)(4是D列的列号),确保不会包含其他列的同名单元格。
内容的提问来源于stack exchange,提问作者user15235239
相关产品推荐
相关产品推荐

