在一些没有应用财务软件的小微企业中,经常需要利用Excel制作财务凭证,以便于财务核算。 其中,收款凭证中的金额大写需要分列填写在与货币单位对应的单元格中,同时还需要在实际金额前的空白位置加上
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,大功告成! 好了,今天的内容就是这些,小伙伴们再见啦。 作者:扯淡子 公式解释整理:祝洪忠 |
|