【问题标题】:Remove all numbers from a string using LAMBDA recursive function使用 LAMBDA 递归函数从字符串中删除所有数字
【发布时间】:2021-09-13 23:18:25
【问题描述】:

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

【问题讨论】:

    标签: arrays excel lambda excel-formula excel-lambda


    【解决方案1】:

    在递归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)。但是,恕我直言,使用变量的美感现在已经丢失,原始方法(例如 here 将有我个人的偏好。

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 1970-01-01
      • 2021-10-06
      • 2016-02-09
      • 1970-01-01
      • 2015-05-27
      • 2018-09-10
      • 2013-09-30
      • 2017-01-25
      相关资源
      最近更新 更多