如何用arrayformula提取单元格中带h后缀的数字并求和
解决方案:用ArrayFormula自动求和带h后缀的数字
针对你需要在Total列自动求和所有后缀为h的数字的需求,以下是适配区域设置(分号分隔公式参数、逗号作为小数分隔符)的ArrayFormula解决方案:
最终公式
=ARRAYFORMULA( IF(LEN(A2:A)=0; ""; TEXT( MMULT( IFERROR( VALUE(REGEXEXTRACT(SPLIT(A2:A; " "); "^([0-9]+[,]?[0-9]*)h(,)?$")); 0 ); SEQUENCE(COLUMNS(SPLIT(A2:A; " ")); 1; 1; 0) ); "#,##0.0h" ) ) )
公式拆解说明
- 拆分文本:
SPLIT(A2:A; " ")将每行文本按空格拆分为独立元素,方便逐个匹配带h的数值。 - 精准提取数值:
REGEXEXTRACT(..., "^([0-9]+[,]?[0-9]*)h(,)?$")用正则表达式精准匹配带h后缀的数值(支持逗号作为小数分隔符,同时处理h后带逗号的情况,如1,5h,),只提取数字部分。 - 转为数值类型:
VALUE(...)将提取的文本数字转换为可计算的数值,适配区域设置的逗号小数格式。 - 处理非匹配项:
IFERROR(..., 0)将不匹配的元素转为0,避免求和时出现错误。 - 每行求和:
MMULT(..., SEQUENCE(...))通过矩阵乘法对每行的数值求和,SEQUENCE生成与拆分列数一致的全1列,确保每行元素相加得到总和。 - 格式化为目标样式:
TEXT(..., "#,##0.0h")将求和结果格式化为带h后缀的文本,保留1位小数(与示例中的4,5h、7,0h格式一致)。 - 空行处理:
IF(LEN(A2:A)=0; ""; ...)当A列为空时,返回空值,避免显示0h。
示例验证
将公式放入Total列的首行(如B2),会自动处理所有行:
- 第一行
Apples 1,5h, Banana 2x, Oranges 3h→ 求和1,5+3=4,5→ 输出4,5h - 第二行
5 Pears 1h, 2 Kiwis 1x, Melon 4h, 2h→ 求和1+4+2=7→ 输出7,0h - 空行 → 返回空值
- 第四行
Stuff 1g, Stuff 2 1,5h, Stuff 3 2j→ 求和1,5→ 输出1,5h
内容的提问来源于stack exchange,提问作者jimihenrik
相关产品推荐
相关产品推荐

