<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    

 

以上所说的表格,可以通过此链接下载:

 

201003311848525826.xls

我的同学也给了一个解决方案,她的思路和我的完全不同,她是将数字仍然看成数字(我是看成字符串处理的!),通过取整来达到目的。

即对一个金额¥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表格可以通过以下链接下载:

 

201003311857160477.xls

总结:

可能是由于一直学习编程,经常对字符串进行处理,我的思维方式已经是计算机的思维方式了。我的同学是数学系的(当然我也是),仍然保留着数学人的思维方式,很好,至简。