本帖最后由 丁建成 于 2022-6-19 04:06 编辑
一、定义函数
在Formula菜单NameManager里面定义下述名称; 下表中公式里面最后的括号及其内容无需在定义公式时录入。 Name | | | | =LAMBDA(a,b,IF(b>LEN(a),a,IF(ISNUMBER(1*MID(a,LEN(a)-b+1,1)),RIGHT(a,b-1),GetLastChar(a,b+1))))("a1b2c3d4e5f",1) | | | =LAMBDA(a,LEFT(a,LEN(a)-LEN(GetLastChar(a,1))))("a1b2c3d4e5f") | | | =LAMBDA(a,b,IF(b>LEN(a),a,IF(MID(a,LEN(a)-b+1,1)="-",RIGHT(a,b),IF(ISNUMBER(1*RIGHT(a,b)),GetLastNumber(a,b+1),RIGHT(a,b-1)))))("a1b2c3d4e5",1) | | | =LAMBDA(a,LEFT(a,LEN(a)-LEN(GetLastNumber(a,1))))("a1b2c3d4e5") | | | =LAMBDA(a,b,IF(b=1,GetLastChar(a,1),RightFindChar(DeleteLastNumber(DeleteLastChar(a)),b-1)))("a1b2c3d4e5f",6) | | | =LAMBDA(a,b,IF(b=1,GetLastNumber(DeleteLastChar(a),1)*1,RightFindNumber(DeleteLastNumber(DeleteLastChar(a)),b-1)))("a1b2c3d4e5f",4) | | | =LAMBDA(a,b,c,IF(c=1,RightFindNumber(a,b),RightFindChar(a,b)))("a1b2c3d4e5f",3,1) | |
A、提取最右边字符串函数,GetLastChar(aas string,b as ID =1) =LAMBDA (a, b, IF ( b>LEN(a), a, IF ( ISNUMBER(1*MID(a,LEN(a)-b+1,1)), RIGHT(a,b-1), GetLastChar(a,b+1) ) ) ) 1、 设置两个参数:待处理字符串,计数值1;从右边逐个递增识别字符,若为字符,则判断下一位;否则,按计数值减1从右边截取字符串。 2、 第二层判断,按当前序数值取单一字符,乘以1强制转换类型,判断是否为数值;如果是,则按当前序数值减1,从右边截取字符串;否则,当期序数值加1,调用本函数; 3、 若待处理字符串,全部为字符,当判断到最左边时,当前序数值等于字符串长度;然后序数值加1,再次调用本函数时,Mid函数将报错;因此,增加第一层判断,避免报错。 B、 删除最右边字符串函数,DeleteLastChar(aas string)解析 =LAMBDA (a, LEFT (a, LEN(a)-LEN ( GetLastChar(a,1) ) ) ) · 设置一个参数:待处理字符串;基于待处理字符串,将GetLastChar函数提取的字符串,按字符串长度差异在待处理串中删除;
C、 提取最右边数值函数:GetLastNumber(aas string,b as ID =1)解析 =LAMBDA (a,b, IF (b>LEN(a), a, IF (MID(a,LEN(a)-b+1,1)="-, RIGHT(a,b), IF (ISNUMBER(1*RIGHT(a,b)), GetLastNumber(a,b+1), RIGHT(a,b-1)) ) ) ) · 设置两个参数:字符串参数,必须最右边为是数值;计数值1; · 相关逻辑与GetLastChar基本相同;从右边逐个递增识别字符,若为数值,则判断下一位;否则,按计数值减1从右边截取数值字符串。 · 增加了一个特殊判断,若当前字符为“-”,则按照当期计数值返回右边的字符串。
|