分享

收款收据,轻松模拟

 臥龍小築 2016-06-13

在一些没有应用财务软件的小微企业中,经常需要利用Excel制作财务凭证,以便于财务核算。

其中,收款凭证中的金额大写需要分列填写在与货币单位对应的单元格中,同时还需要在实际金额前的空白位置加上符号:


如图中所示,模拟收据中已有大写金额的万、仟、佰、拾、元、角、分等单位,需要依据W6单元格的小写金额数字,在E6:U6单元格中填写对应的金额大写,没有数据的部分加上符号占位,如果手工输入,将会非常繁琐。



E6单元格输入以下公式:

=IFERROR(NUMBERSTRING(LEFT(RIGHT(' '&$W$6*100,9-(COLUMN(A1)-1)/2)),2),'U')

单击E6复制公式,按住Ctrl不放,依次点击G6、I6、K6、M6……U6单元格,按Ctrl+V粘贴。



公式看起来比较复杂,咱们一点一点的拆解:

$W$6*100部分

表示将W6单元格的数值800放大100倍,转换为整数。再将空格“ ”与其连接,变成新的字符串“ 80000”。


使用RIGHT函数在“ 80000”这个字符串的右侧开始取值,长度为:

9-(COLUMN(A1)-1)/2部分的计算结果。

9-(COLUMN(A1)-1)/2用于生成序列值,计算结果为9。

在公式复制到右侧单元格时,每间隔一列,序列值依次递减,9  8  7 ……2  1。

即每向右一列,RIGHT函数的取值长度减少1。



如果RIGHT函数指定要截取的字符数超过字符串总长度,结果仍为原字符串。RIGHT(' 80000',9)的结果仍然为“ 80000”,最后使用LEFT函数取得首字符,结果为空格。



再以M6单元格中的公式为例:

其中,' '&$W$6*100部分结果仍为“ 80000”,但9-(COLUMN(I1)-1)/2部分的计算结果变为5,因此RIGHT(' 80000',5)只取出右边的5个字符“80000”,最后通过LEFT函数取得首字符“8”。  

其它单元格中的公式计算过程以此类推,不再赘述。  

RIGHT函数中的字符串“ ”前面多加入一个半角空格,目的在于将未涉及金额的部分置为空格,使其在表格中显示为空白。



NUMBERSTRING函数是一个隐藏函数,可以方便的实现小写数字到中文大写数字的转化。

对于LEFT函数返回的空格,NUMBERSTRING函数的结果是#VALUE!,最后再用IFERROR函数将错误值转换为字母“U”。


为什么要转换为“U”呢?其实这是“曲线救国”策略,      

想要模仿手工填写效果,没有数字的空位显示出符号,是不太容易办到的,因为插入符号里没有这个

然而大写字母“U”在wingdings 2这种字体格式下,就会变成

于是……我们先把空位填上“U”,再通过一段代码把有“U”的单元格字体从宋体变成wingdings 2。



右键单击工作表标签,【查看代码】,在代码窗口中输入以下内容:

Private Sub Worksheet_Change(ByVal Target As Range)

For i = 5 To 21

设置循环

   Cells(6, i).Font.Name = '宋体'

第6行第5到21列字体设为【宋体】

If Cells(6, i) = 'U' Then

设置条件

   Cells(6, i).Font.Name = 'Wingdings 2'

如果第6行第4到19列有等于“U”的单元格,则修改该单元格字体为Wingdings 2

End If

结束条件

Next

结束循环

End Sub


OK,大功告成!


好了,今天的内容就是这些,小伙伴们再见啦。

作者:扯淡子 公式解释整理:祝洪忠

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多