<p>有人问到这个问题,如何把金额数字按位分配到相应的单元格?比如输入¥123.45,就将5分配到分,4分配到角,3分配到元,2分配到十元,1分配到百元,依次类推。</p>
即:
亿 | 千万 | 百万 | 十万 | 万 | 千 | 百 | 十 | 元 | 角 | 分 |
1 | 1 | 7 | 7 | 2 | 3 | 5 | 4 | 3 | 2 | |
11772354.32 | ||||||||||
在A8中输入任一个数(如上面的11772354.32),让它们自动分配到第二行相应的位置 |
我立即将这个问题解决了,思路是将输入的数字做为字符串,去找小数点的位置(如无小数点,则认为是在最后一个字符的后面),然后,截取小数点后两位的字符,将它分配到分,再截取小数点后一位的字符,将它分配到角,然后再截取小数点前一位的字符,将它分配到元,然后截取小数点前两位的字符,分配到十元处,依次类推。
以上是基本思路,写公式时,加上了错误处理,最终公式为(仅列出分配“分”的公式):
=IF(ISERROR(MID($A$8,IF(ISERROR(FIND(".",$A$8)),LEN($A$8)+1,FIND(".",$A$8))+2,1)),"",MID($A$8,IF(ISERROR(FIND(".",$A$8)),LEN($A$8)+1,FIND(".",$A$8))+2,1))
它工作得很好。
我又将以上解决方案稍作修改,使更加方便用户:
输入 | 亿 | 千万 | 百万 | 十万 | 万 | 千 | 百 | 十 | 元 | 角 | 分 |
134.34 | 1 | 3 | 4 | 3 | 4 | ||||||
31,485,345.34 | 3 | 1 | 4 | 8 | 5 | 3 | 4 | 5 | 3 | 4 | |
32.00 | 3 | 2 | |||||||||
275,423,442.33 | 2 | 7 | 5 | 4 | 2 | 3 | 4 | 4 | 2 | 3 | 3 |
3,454,366.54 | 3 | 4 | 5 | 4 | 3 | 6 | 6 | 5 | 4 | ||
11.00 | 1 | 1 |
以上所说的表格,可以通过此链接下载:
我的同学也给了一个解决方案,她的思路和我的完全不同,她是将数字仍然看成数字(我是看成字符串处理的!),通过取整来达到目的。
即对一个金额¥123.45,要求出十元位置的2,那么,先将123.45除以10并取整得12,再将123.45除以100取整得1,再将结果乘以10得10,最后用12减去10得到正确的结果2。要求出百元位置的1,那么按同样的算法,将123.45除以100并取整得1,再将123.45除以1000取整得0,再将结果乘以10仍得0,最后1减去0得到结果1。其它位置依次类推。
她的解决方案我很喜欢,公式非常简洁,如:
千万 | 百万 | 十万 | 万 | 千 | 百 | 十 | 元 | 角 | 分 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 3 | 1 | 2 |
输入--> | 1113.12 |
其中求分的公式为:=INT(C4*100)-INT(C4*10)*10,C4即为1113.12所处于的单元格。
这个Excel表格可以通过以下链接下载:
总结:
可能是由于一直学习编程,经常对字符串进行处理,我的思维方式已经是计算机的思维方式了。我的同学是数学系的(当然我也是),仍然保留着数学人的思维方式,很好,至简。