分享实例,一起学习excel新函数的应用。如下图:
图例以上图例,从上部份的图表,转换为下部份的图表,姓名有三个字的,也有两个字的,数字、名字前后混合,当然这个演示例子是必须都有两种数据存在。
下面开始分享操作:
1.图例上部份是中文名字和数字混合在一起,要完成操作,首先要把姓名和数字分离出来,把它换化为姓名一列数字一列。
姓名和数字分离要用到两个部分的公式,要先把姓名分离出来成为一列,结果如下图所示:
即参考公式如下:
=TAKE(TEXTSPLIT(TEXTJOIN("-",,TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,",")),,"-"),,1)或
=TEXTSPLIT(TEXTJOIN("-",,SUBSTITUTE(IFERROR(TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,","),""),".","")),,"-"),这个公式是数字不是整数的情况下,把小数点去掉。
示图TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,","),这个的作用是第一次把姓名和数字分离出来,得到中文名字。
ROW(1:10)-1,得到的是0~9的一组数据,结果如下图所示:
示图再通过TEXTSPLIT函数把数字替换掉,结果如下图所示:
示图把数字清理掉后,通过TEXTJOIN函数把中文姓名连接起来,再通过TEXTSPLIT函数把姓名再次拆分后,用TAKE函数提取第一列数据,就得到了所有的中文姓名形成的一列数据。
2.已经把姓名分离出来就好办了,但是还是要用到LET函数来把对姓名这个定义为变量,以便用于把数字分离出来。操作结果如下图所示:
即参考公式如下:
=LET(m,TEXTSPLIT(TEXTJOIN("-",,TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,",")),,"-"),SUBSTITUTE(TOCOL(A1:D3),m,""))
示图m是分离出来的姓名,通过SUBSTITUTE把姓名替换掉就之后,就得到了纯数字的一列数据。
TOCOL(A1:D3),这个是把数据转为一列,结果如下图所示:

3.通过以上分离后,就得到纯中文姓名和纯数字,现在把这两列数据进行处理,合并相同的姓名,对数字进行汇总,就得到了想要的结果。具体操作结果如下图所示:
即参考公式如下:
=LET(m,TEXTSPLIT(TEXTJOIN("-",,TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,",")),,"-"),s,SUBSTITUTE(TOCOL(A1:D3),m,""),a,UNIQUE(m),VSTACK({"姓名","合计"},HSTACK(a,MAP(a,LAMBDA(x,SUM(FILTER(--s,m=x)))))))
示图LET函数定义的第1个变量名为m,变量内容为TEXTSPLIT(TEXTJOIN("-",,TEXTSPLIT(TEXTJOIN(",",,A1:D3),ROW(1:10)-1,",")),,"-"),即分离出来的中文姓名;第2个变量名为s,变量内容为SUBSTITUTE(TOCOL(A1:D3),m,""), 即分离出来的数字;第3个变量名为a,变量内容为UNIQUE(m),对姓名去重,保留唯一值;计算表达式为VSTACK({"姓名","合计"},HSTACK(a,MAP(a,LAMBDA(x,SUM(FILTER(--s,m=x)))))),VSTACK函数是对“姓名”,“合计”和HSTACK函数的结果进行纵向堆叠,这里最主要在于MAP(a,LAMBDA(x,SUM(FILTER(--s,m=x)))),MAP函数它有2个参数,第1个参数是LET函数定义的变量3,即姓名去重后的a变量,MAP函数的第2参数是LAMBDA表达式;LAMBDA表达式第1参数属于自定义名称(x),指向第1个数组中每个被遍历的元素,第2参数是计算方式SUM(FILTER(--s,m=x))),对FILTER函数筛选出来的对应相同姓名数据(--s)进行求和。
这个例子主要是用LET函数定义变量,后面的参数可以调用前面定义的任意变量,来进行计算应用。