Excel-我们如何使用LAMBDA()替换单元格中的多个字符或整个单词

冒着跑题的风险,我决定做一些问答,因为我对 MS 向 Excel365 引入的新功能感到非常兴奋;该LAMBDA()功能。如果普遍认为这是题外话,请告诉我,我可以删除问答。

LAMBDA()函数基本上是您在 Excel 中创建自己的函数的方式。然后,您可以继续在整个工作簿中调用此函数。但是关于它的绝对伟大的事情(恕我直言)是它能够在函数内调用自己,因此是递归的

SUBSTITUTE()如果必须交换多个字符,或者从某些字符甚至整个单词中清除字符串,我们都知道繁琐的嵌套函数。所以问题是:我们如何避免这种情况并利用LAMBDA()我们的优势?

回答

因此,让我们创建一个需要清理的字符串示例;a+b#c%d*e(f)g!h.

公式B1

=SUBALL(A1,"+#%*()!","")

我通过“名称管理器”菜单创建SUBALL()的我们LAMBDA()函数的名称在哪里,内容如下:

=LAMBDA(str,chrs,sub,IF(chrs="",str,SUBALL(SUBSTITUTE(str,LEFT(chrs),sub),RIGHT(chrs,LEN(chrs)-1),"")))

这个公式的核心是 3 个变量:

  • str - 对要清理的字符串的引用。
  • chrs - 要替换​​的字符串。
  • sub - 我们希望我们的角色被替换成什么?

第四个参数是一个嵌套的IF(). 由于递归调用,我们需要摆脱无限循环的方法。因此我们测试是否chrs=""。如果TRUE我们返回包含所有替换字符的最终字符串。如果FALSE我们再次调用该函数。最棒的是我们可以改变所有变量!这很重要,因为我们因此可以删除SUBSTITUTE()最左边的字符并且可以剪切替换字符串中的相同字符。

我们也可以将它提升一个档次并从数组中替换元素。例如:

中的公式B1

=SUBALL(A1,{"STR1","STR2","STR3"},"-")

请注意,您还可以硬编码单个值或引用单个单元格(或任何垂直范围)。显然这会影响我们处理递归的方式。可能有更漂亮的方法,但我想出了:

=LAMBDA(str,del,sub,IF(COUNTA(del)=1,SUBSTITUTE(str,@del,sub),SUBALL(SUBSTITUTE(str,@del,sub),INDEX(del,SEQUENCE(COUNTA(del)-1,,2)),sub)))

该函数的核心仍然相同,但如前所述,我们现在使用了一个数组。所以我们IF()将不再检查空值,而是检查数组中是否只有一个元素。如果是这样,它将执行单个SUBSTITUTE(),但如果不是,则它将递归调用,SUBALL()直到我们从数组中切出足够的值,INDEX()以便替换所有值。

你有它,一个递归函数,你现在可以在整个工作簿中调用它。很酷。

  • very, very, very cool

以上是Excel-我们如何使用LAMBDA()替换单元格中的多个字符或整个单词的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>