2

我一直在关注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
)
)
))
4

1 回答 1

1

嵌套LET()在递归LAMBDA()中会很麻烦,因为每次在递归中使用变量时,都会从头开始。因此,替换字符将永远不会停止(如果我对此的解释是正确的)。但是在您的情况下,您甚至不需要进行递归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). 但是,恕我直言,使用变量的美感现在已经失去了原来的方法(例如这里会有我个人的喜好。

于 2021-09-14T06:31:30.203 回答