使用 LAMBDA 递归函数从字符串中删除所有数字

Remove all numbers from a string using LAMBDA recursive function

我一直在关注 Exceljet 上的指南,了解如何创建递归 LAMBDA 函数,从字符串中删除所有数字。例如,A1B2C3D4E5 变为 ABCDE。

我唯一想要不同的是将包含字符遗漏的字符串存储在函数而不是单元格中。所以,我把开头那行的chars参数去掉,用LET函数来存储字符串

问题是我一直收到#VALUE!错误,无法找出原因。

=LAMBDA(str,sub,

LET(chars,"0123456789",

IF(chars="",str,

ReplaceChars(

SUBSTITUTE(str,LEFT(chars),sub),
MID(chars,2,LEN(chars)-1),
sub
)
)
))

递归 LAMBDA() 中的嵌套 LET() 会很麻烦,因为每次您在递归中使用变量时都会从头开始。因此替换字符将永远不会停止(如果我对此的解释是正确的)。但是在您的情况下,您甚至不需要递归 LAMBDA() 来替换数字,例如:

=LAMBDA(str,LET(X,MID(str,SEQUENCE(LEN(str)),1),CONCAT(IF(ISNUMBER(X*1),"",X))))

现在这个函数的核心是:

=LET(X,MID(A1,SEQUENCE(LEN(A1)),1),CONCAT(IF(ISNUMBER(X*1),"",X)))

可以在LAMBDA()之外使用就好了。我们甚至可以将其替换为

=LET(X,MID(A1,SEQUENCE(LEN(A1)),1),CONCAT(IF(ISNUMBER(FIND(X,"0123456789")),"",X)))

对要替换的任何字符执行相同的操作。

现在您可以拨打=REPLACECHARS(A1)。但是,恕我直言,使用变量的好处现在已经丢失,原来的方法(例如 有我个人的喜好。