|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 天上的小云云 于 2016-2-11 00:32 编辑
客气,论坛本身就是一个学习交流的平台,也正是因为你的提问别人才能从中学习和操练使得自己的水平有所提高。
至于公式的解释涉及到TRIM、TEXT、REPT等函数的常规用法,还有如何将一列数字重新组合的嵌套套路,建议可以翻看王佩丰老师的函数中级(文本处理)的相关章节,优酷里面会有
这里的+ROW(1:12)*100似乎完全没有必要,因此可以去掉,改成
- =SUBSTITUTE(TRIM(SUBSTITUTE(MID(SUBSTITUTE(TEXT(SUM(RIGHT(LARGE(--IF(C4:C15="",MID($B4:$B15,3,2),),ROW(1:12)),2)*100^(ROW(1:12)-1)),REPT("00!、",COUNTBLANK(C4:C15))),"、0","、"),2,99),"、",REPT(" ",99)))," ","、")
复制代码
--IF(C4:C15="",MID($B4:$B15,3,2),) ‘如果C4到C15为空,截取B4到B15的数字,否则取0,并将文本转换成数值
RIGHT(LARGE(--IF(C4:C15="",MID($B4:$B15,3,2),),ROW(1:12)),2) ’将截取的数值从大到小排序并从右向左取2位
RIGHT(LARGE(--IF(C4:C15="",MID($B4:$B15,3,2),),ROW(1:12)),2)*100^(ROW(1:12)-1) ‘将截取的数字分别乘以10的0次方到10的11次方并相加(正好可以将示例中的一到六行以“10203040506”填充,原本完全可以通过“10^(RWO(1:12)-1)”达成的,可是因为有第10到12行所以必须改成“100^(ROW(1:12)-1”,这里相对的数字位数超过15位由于EXCEL的精度问题就会出错,示例中完成节数不到4节即会出错)
TEXT(SUM(RIGHT(LARGE(--IF(C4:C15="",MID($B4:$B15,3,2),),ROW(1:12)),2)*100^(ROW(1:12)-1)),REPT("00!、",COUNTBLANK(C4:C15))) '将示例中的结果“10203040506”变成"01、02、03、04、05、06、"
后面的SUBSTITUTE、MID和TRIM只是简单的替换不再赘述
总结:总体来说公式的通用性还是不够强,完成数不到4节的就无法给出正确的结果,算法受EXCEL精度影响较大,也希望论坛的诸多大神们能给出更妙的算法供小弟借鉴…… |
|