使用递归LAMBDA函数移除字符串数字,内置待过滤字符时报#VALUE!错误
问题原因
- 你当前定义的
LAMBDA仅声明了str、sub两个入参,但递归调用ReplaceChars时传入了3个参数,参数数量不匹配直接触发#VALUE!错误。 - 你把固定数字序列
0123456789写在LET的头部,每次调用函数都会把chars重置为完整的数字序列,就算参数匹配也会进入无限递归,最终也会返回错误。
修正后代码
你可以把递归逻辑封装为内部函数,初始待过滤序列仅在首次调用时赋值一次,无需作为入参传入:
=LAMBDA(str,sub, LET( // 内部存储待过滤的数字序列 init_chars,"0123456789", // 定义带字符序列参数的内部递归函数 rec_func,LAMBDA(current_str,current_chars, IF(current_chars="",current_str, rec_func( SUBSTITUTE(current_str,LEFT(current_chars),sub), MID(current_chars,2,LEN(current_chars)-1) ) ) ), // 启动递归逻辑 rec_func(str,init_chars) ))
使用方法
将上述函数命名为ReplaceChars后,直接调用=ReplaceChars(待处理字符串, "")即可移除所有数字,例如输入A1B2C3D4E5会返回ABCDE,和预期效果一致。
内容的提问来源于stack exchange,提问作者Statto
相关产品推荐
相关产品推荐

