Excel中金额小写转大写,职场小技能,值得学习

Excel中金额小写转大写,职场小技能,值得学习对于做财务的同学应该经常会遇到要求把金额用大写的方式展示吧,如下图这样。今天小编就和大家分享如何把数字金额转换为大写金额。1、单元格格式Excel本身自带了中文大写数字格式,但是实际使用不仅容易,下面

点赞再看,养成习惯;圣人千虑,必有一失。

微信搜索【亦心Excel】关注这个不一样的自媒体人。

本文 GitHub github.com/hugogoos/Ex… 已收录,包含Excel系统学习指南系列文章,以及各种Excel资料。

对于做财务的同学应该经常会遇到要求把金额用大写的方式展示吧,如下图这样。

Excel中金额小写转大写,职场小技能,值得学习

今天小编就和大家分享如何把数字金额转换为大写金额。

1、单元格格式

Excel本身自带了中文大写数字格式,但是实际使用不仅容易,下面我们一起来看看吧。

不知道大家还记不记得在单元格格式中数字类别类别下有个特殊格式,这个格式下就有中文大写数字格式。

Excel中金额小写转大写,职场小技能,值得学习

我们直接用开头的数据来试试,看看效果,也好做个对比。

Excel中金额小写转大写,职场小技能,值得学习

看到结果应该知道小编为什么说不尽如意了吧。这种方式有几个问题:①没有元角分单位;②有小数点;③没有包含整字。

2、NUMBERSTRING函数

NUMBERSTRING函数是Excel中的一个隐藏函数,就是在函数列表里查不到的,我们也就不去研究Excel出于什么原因没有公开这个函数了。

函数格式:「=NUMBERSTRING(VALUE,TYPE)」;

函数作用;处理小写数字转大写数字;

说明:VALUE表示要转换的数字;TYPE有三种类型可选为「1、2、3」,每种类型对应一种展示大写方式。

注意点:这个函数只支持正整数,不支持小数。

我们来看看三种类型的效果对比:

Excel中金额小写转大写,职场小技能,值得学习

从结果上来看类型参数为2的是我们需要的,并且我们发现也是没有单位没有整字的,而且函数不能处理小数。我们可以看下效果:

Excel中金额小写转大写,职场小技能,值得学习

而且我们还发现如果直接使用小数,结果会被四舍五入。

不过这些都不是问题,因为是函数所有操作空间就很多,我们可以进行加工得到我们想要的。

我们先来解决四舍五入的问题。今天我们来学习一个新函数TRUNC。这个函数很简单,主要作用是把数字的小数部分截掉,保留整数部分,语法:TRUNC(数字)。

然后我们来解决小数部分。既然NUMBERSTRING函数只能处理整数,那么如果我们把小数部分转为整数不就行了吗?而且我们只需要处理角和分也就是两个字。

小编第一个想到的是截取函数,然后定位到角分,方案是可以的,就是公式写出来很长很繁琐。

如下图,如一个两位小数,我们首先把这个两位小数乘以10,然后对结果截取整数部分得到金额1,那么十分位就变成个位了;然后对这个两位小数直接截取整数部分再乘以10得到金额2,并且金额2的个位一定是0,而且金额1和金额2位数也一定相等,只要把金额1减金额2就可得到角了。

Excel中金额小写转大写,职场小技能,值得学习

同理「=TRUNC(A5*100)-TRUNC(A5*10)*10」可得分。

现在四舍五入,角,分问题都解决了,我们把公式拼接一下就可以了。最终得到公式:「=NUMBERSTRING(TRUNC(B5),2)&”元”&NUMBERSTRING(TRUNC(B5*10)-TRUNC(B5)*10,2)&”角”&NUMBERSTRING(TRUNC(B5*100)-TRUNC(B5*10)*10,2)&”分”」,我们看看效果:

Excel中金额小写转大写,职场小技能,值得学习

看到结果还是不是很理想,还是有很多问题,整数结尾应该是“元整”,角为有值分位没值的结尾应该是“角整”,分位有值的且角位为0的应该是“零玖分”这样,后面不应该有“零分”。当然这些问题也可通过IF函数在处理,但是这就会导致公式很长。

小编发现主要问题就是在小数部分的处理上,因此我们可以选择把小数部分复杂的处理交给VBA处理,代码如下:

'获取小数部分大写金额
Function GetDecimal(cell)
Dim arrResult() As String
'截取小数点
arrResult = VBA.Split(cell, ".")
Dim iArr As Integer
iArr = UBound(arrResult)
'没有小数部分直接返回"元整"
If iArr = 0 Then
GetDecimal = GetDecimal & "元整"
'有小数部分且是格式正确
ElseIf iArr = 1 Then
Dim strSmall As String
strSmall = arrResult(1)
Dim iSmall As Integer
Dim strJiao, strFen As String
'获取小数位数
iSmall = Len(strSmall)
'一位小数则为分
If iSmall = 1 Then
strJiao = getUpperCase(strSmall)
'两位小数则为分角
ElseIf iSmall = 2 Then
strJiao = getUpperCase(Left(strSmall, 1))
strFen = getUpperCase(Right(strSmall, 1))
'大于两位小数只取前两位分角
ElsestrJiao = getUpperCase(Left(strSmall, 1))
strFen = getUpperCase(Mid(strSmall, 2, 1))
End If
'如 1.00 为 壹元整
If (strFen = "" Or strFen = "零") And strJiao = "零" Then
GetDecimal = GetDecimal & "元整"
'如 1.10 为 壹元壹角整
ElseIf (strFen = "" Or strFen = "零") And strJiao <> "零" Then
GetDecimal = GetDecimal & "元" & strJiao & "角整"
'如 1.01 为 壹元零壹分
ElseIf strFen <> "" And strFen <> "零" And strJiao = "零" Then
GetDecimal = GetDecimal & "元" & "零" & strFen & "分"
'如 1.11 为 壹元壹角壹分
ElseIf strFen <> "" And strFen <> "零" And strJiao <> "零" Then
GetDecimal = GetDecimal & "元" & strJiao & "角" & strFen & "分"
End If
'有小数部分但是格式不正确
Else
GetDecimal = GetDecimal & "数据格式有问题"
End If
End Function


'数字转大写
Private Function getUpperCase(str) As String
Dim strWord As String
Select Case str
Case "0": strWord = "零"
Case "1": strWord = "壹"
Case "2": strWord = "贰"
Case "3": strWord = "叁"
Case "4": strWord = "肆"
Case "5": strWord = "伍"
Case "6": strWord = "陆"
Case "7": strWord = "柒"
Case "8": strWord = "捌"
Case "9": strWord = "玖"
Case Else: strWord = str
End Select
getUpperCase = strWord
End Function

代码100分

代码中也有解释,小编注解应该还算清楚,不清楚的可以和小编一起探讨。

最后把整数部分和小数部分结合起来,使用公式:「=NUMBERSTRING(TRUNC(B5),2)&GetDecimal(B5)」即可得到最终效果。

Excel中金额小写转大写,职场小技能,值得学习

今天的分享到这里就结束了,但是学习的道路才刚刚开始,希望我们可以在学习的道路上不断地前进,坚持不懈。

如果你有感兴趣的功能,可以告诉小编哦,小编会为你写一篇相应的文章。当然是先到先写哈,我会列一个计划表,尽量满足大家的需求,所以如果下一篇不是你要的文章,请不要着急,可能就在下下篇。记得告诉小编你想学习的功能哦。

文章持续更新,可以微信搜索「 亦心Excel 」第一时间阅读,本文 GitHub github.com/hugogoos/Ex… 已经收录,包含Excel系统学习指南系列文章,欢迎Star。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11325.html

(0)
上一篇 2023-03-02
下一篇 2023-03-02

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注