专注分享
有价值的知识

数字转换为葡语字母的Excel VBA 代码

✅ 功能说明

  • 输入:数字(如 1234.56

  • 输出:葡语金额大写(如 MIL DUZENTOS E TRINTA E QUATRO METICAIS E CINQUENTA E SEIS CENTAVOS

  • 币种为:Metical(单数) / Meticais(复数)


📘 使用方法

  1. 打开 Excel,按下 Alt + F11 打开 VBA 编辑器。

  2. 在菜单中选择:插入 → 模块

  3. 将下面的代码粘贴进去。

  4. 保存并关闭 VBA 编辑器。

  5. 在单元格中使用函数:

    =NumeroPorExtenso(A1)

    如果 A1 的值为 1250.75,则显示:

    MIL DUZENTOS E CINQUENTA METICAIS E SETENTA E CINCO CENTAVOS

💻 VBA 代码

Option Explicit

Function NumeroPorExtenso(valor As Double) As String
Dim unidades As Variant, dezenas As Variant, centenas As Variant
Dim parteInteira As Long, parteDecimal As Long
Dim resultado As String

unidades = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", _
"dez", "onze", "doze", "treze", "catorze", "quinze", "dezasseis", "dezassete", "dezoito", "dezanove")
dezenas = Array("", "", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa")
centenas = Array("", "cem", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos")

parteInteira = Int(valor)
parteDecimal = Round((valor - parteInteira) * 100)

resultado = Trim(ExtensoParte(parteInteira, unidades, dezenas, centenas))

If parteInteira = 1 Then
resultado = resultado & " Metical"
Else
resultado = resultado & " Meticais"
End If

If parteDecimal > 0 Then
resultado = resultado & " e " & ExtensoParte(parteDecimal, unidades, dezenas, centenas)
If parteDecimal = 1 Then
resultado = resultado & " Centavo"
Else
resultado = resultado & " Centavos"
End If
End If

' 转为首字母大写
NumeroPorExtenso = StrConv(resultado, vbProperCase)
End Function

Private Function ExtensoParte(n As Long, unidades As Variant, dezenas As Variant, centenas As Variant) As String
Dim resultado As String
If n = 0 Then
ExtensoParte = "zero"
Exit Function
End If

If n < 20 Then
resultado = unidades(n)
ElseIf n < 100 Then
resultado = dezenas(Int(n / 10))
If n Mod 10 > 0 Then resultado = resultado & " e " & unidades(n Mod 10)
ElseIf n < 1000 Then
Dim c As Long
c = Int(n / 100)
If n = 100 Then
resultado = "cem"
Else
resultado = centenas(c + 1)
If n Mod 100 > 0 Then resultado = resultado & " e " & ExtensoParte(n Mod 100, unidades, dezenas, centenas)
End If
ElseIf n < 1000000 Then
resultado = ExtensoParte(Int(n / 1000), unidades, dezenas, centenas) & " mil"
If n Mod 1000 > 0 Then resultado = resultado & " e " & ExtensoParte(n Mod 1000, unidades, dezenas, centenas)
Else
resultado = ExtensoParte(Int(n / 1000000), unidades, dezenas, centenas) & " milhão"
If Int(n / 1000000) > 1 Then resultado = Replace(resultado, "milhão", "milhões")
If n Mod 1000000 > 0 Then resultado = resultado & " e " & ExtensoParte(n Mod 1000000, unidades, dezenas, centenas)
End If

ExtensoParte = resultado
End Function

📍示例

数字 结果
10 DEZ METICAIS
105.2 CENTO E CINCO METICAIS E VINTE CENTAVOS
1234.56 MIL DUZENTOS E TRINTA E QUATRO METICAIS E CINQUENTA E SEIS CENTAVOS
1000000 UM MILHÃO METICAIS
赞(0) 打赏
未经允许不得转载:可汗博客 » 数字转换为葡语字母的Excel VBA 代码

评论 抢沙发

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册