|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
的确高手,学习了!
试着解释下做个学习记录:
首先是名称定义sz(数字的缩写,提出数字用的)
LOOKUP(9E+307,--MID(Sheet1!A5,MIN(FIND(ROW(Sheet1!$1:$10)-1,Sheet1!A5&1234567890)),ROW(Sheet1!$1:$1024)))
min(FIND(ROW(Sheet1!$1:$10)-1,Sheet1!A5&1234567890))
mid第二个参数,取数字在字符串中的最小排位,字符串后加10个数字比较聪明,防止find函数查找失败。如A5="t556h"则增加数字后变为t556h1234567890,find变为find({0,1,2,3,4,5,6,7,8,9},"t556h1234567890")得到数组{15,6,7,8,9,2,4,1213,14}取最小值得到2,也就是5的位置。
mid(Sheet1!A5,第二个参数(2),ROW(Sheet1!$1:$1024)
不难理解得到一个长数组(1024个)如下:
{5,55,556,556h,556h,556h...}
lookup(9E+307,{5,55,556,556h,556h,556h...})
9E+307就是9后面有307个零的数非常大,目的是利用lookup的特性取得数组中的最大数值。
可参阅:http://bbs.17500.cn/thread-384095-1-1.html
主函数:
IF(TYPE(--RIGHT(A5))=1,SUBSTITUTE(A5,sz,"-"&sz),SUBSTITUTE(A5,sz,"-"&sz&"-"))
如果字符串右边第一个字符为数字则SUBSTITUTE(A5,sz,"-"&sz),
否则:SUBSTITUTE(A5,sz,"-"&sz&"-")
不难理解了,就是把数字部分增加"-"替换掉原来的数字。
以上为个人理解,不到之处请各位大侠指点。 |
|