专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
Excel之家ExcelHome  ·  带迷你图的数据透视表 ·  5 天前  
Excel之家ExcelHome  ·  Excel求和还不会,年终发奖两行泪 ·  5 天前  
Excel之家ExcelHome  ·  自动扩展的序号,与数据记录同步变动 ·  4 天前  
完美Excel  ·  使用Excel公式查找列中最后使用的单元格 ·  5 天前  
Excel之家ExcelHome  ·  WPS表格中的这些特色函数,确实不孬 ·  6 天前  
51好读  ›  专栏  ›  完美Excel

在Excel中使用LAMBDA创建SPLIT函数

完美Excel  · 公众号  · Excel  · 2024-10-05 06:49

正文

学习Excel技术,关注微信公众号:
excelperfect

标签:LAMBDA函数

SPLIT函数可以将单元格中以分隔符连接的文本字符串拆分到单独的单元格。在VBA中,有一个内置的SPLIT函数可以实现这样的功能。本文尝试在Excel中使用LAMBDA来实现,这很难,但实现过程中能够学到很多。

单击功能区“公式”选项卡“定义的名称”组中的“定义名称”,在对话框中,输入名称为:

SPLITTER

引用位置为:

=LAMBDA(txt,delim,[n],[list],LET(p,IFERROR(FIND(delim,txt),0), list,IF(ISOMITTED(list), {""},list), IF(p,Splitter(MID(txt,p+1,99),delim,n+1,IF(SEQUENCE(1,n+1)1,list,LEFT(txt,p-1))),IF(n=0,txt,IF(SEQUENCE(1,n+1)1,list,txt)))))

单击“确定”后,在Excel工作表中就可以使用了,效果如下图1所示。

1
这里使用了递归工作,提取第一个项目并将其放入列表中,然后调用自身提取下一个项目,依此类推。

1.输入是要拆分的文本、文本中的分隔符、到目前为止找到的项目数、这些项目的列表(最后两项最初不是由用户提供的,而是用于递归,因此它们被标记为可选)。

2.找到下一个分隔符的位置并存储在p中。

3.如果list变量为空(仅刚开始),将其设置为一个空白数组。

4.如果找到了分隔符,使用剩余的文本、分隔符、项目数+1再次调用该函数,并将最新的项目添加到list

5.如果没有找到分隔符,就结束了,于是将剩余的文本添加到list中并输出。

创建可变长度列表

用长度为n的现有列表L,并在末尾附加一个新项T,因此数组现在有n+1项:

IF(SEQUENCE(1,n+1)1, L, T)

重新定义LAMBDA输入

到目前为止找到的项目列表被传递给SPLITTER进行下一次递归,但在第一轮递归时,没有列表可以追加,因此使用LET来检查,并创建一个空白数组。

IF(ISOMITTED(list), {""}, list)

注:本文示例学习整理自mrexcel.com,供有兴趣的朋友研究。


欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。