El dia de hoy quiero compartir con todos una funcion que permite que podamos escribir un numero usando palabras.
algo asi como:
donde extracte una seccion simplificada de lo que puede ser un presupuesto de construccion, que es el campo donde me desempeño mejor.
Cualquier usuario de Excel, por nuevo que sea, entiende que si modifico la cantidad o el costo unitario de cualquiera de las actividades, la actualizacion de los subtotales y el costo final es automatica.
Pero lo es tambien el costo total en letras?
Si observas detalladamente el grafico, podras observar en la barra de formulas que la celda activa es en realidad una funcion y no un valor escrito a mano.
Una funcion definida por el usuario que ahora comparto con todos los seguidores del blog.
Solo tienes que agregarla a uno de tus modulos y listo:
Public Function EnLetras(Valor) As String
Dim Centavos As Integer
Dim Fraccion As String
Dim Moneda As String
If Not IsNumeric(Valor) Then
EnLetras = "ERROR"
Exit Function
End If
Moneda = IIf(Int(Abs(Valor)) = 1, " peso", " pesos")
If Right(Letras(Abs(Int(Valor))), 6) = "illon " Or Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda
Centavos = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
Fraccion = IIf(Centavos = 1, " centavo", " centavos")
Fraccion = IIf(Centavos = 0, "", " con " & Letras(Centavos) & Fraccion)
EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fraccion
EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2)
If Valor < 0 Then EnLetras = "menos " & EnLetras
End Function
Private Function Letras(Valor) As String
' Funcion Auxiliar de uso exclusivo de la funcion EnLetras
Select Case Int(Valor)
Case 0
Letras = "cero"
Case 1
Letras = "un"
Case 2
Letras = "dos"
Case 3
Letras = "tres"
Case 4
Letras = "cuatro"
Case 5
Letras = "cinco"
Case 6
Letras = "seis"
Case 7
Letras = "siete"
Case 8
Letras = "ocho"
Case 9
Letras = "nueve"
Case 10
Letras = "diez"
Case 11
Letras = "once"
Case 12
Letras = "doce"
Case 13
Letras = "trece"
Case 14
Letras = "catorce"
Case 15
Letras = "quince"
Case Is < 20
Letras = "diez y " & Letras(Valor - 10)
Case 20
Letras = "veinte"
Case Is < 30
Letras = "veinti" & Letras(Valor - 20)
Case 30
Letras = "treinta"
Case 40
Letras = "cuarenta"
Case 50
Letras = "cincuenta"
Case 60
Letras = "sesenta"
Case 70
Letras = "setenta"
Case 80
Letras = "ochenta"
Case 90
Letras = "noventa"
Case Is < 100
Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10)
Case 100
Letras = "cien"
Case Is < 200
Letras = "ciento " & Letras(Valor - 100)
Case 200, 300, 400, 600, 800
Letras = Letras(Int(Valor \ 100)) & "cientos"
Case 500
Letras = "quinientos"
Case 700
Letras = "setecientos"
Case 900
Letras = "novecientos"
Case Is < 1000
Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100)
Case 1000
Letras = "mil"
Case Is < 2000
Letras = "mil " & Letras(Valor Mod 1000)
Case Is < 1000000
Letras = Letras(Int(Valor \ 1000)) & " mil"
If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000)
Case 1000000
Letras = "un millon"
Case Is < 2000000
Letras = "un millon " & Letras(Valor Mod 1000000)
Case Is < 1000000000000#
Letras = Letras(Int(Valor / 1000000)) & " millones "
If (Valor - Int(Valor / 1000000) * 1000000) Then
Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000)
End If
Case 1000000000000#
Letras = "un billon"
Case Is < 2000000000000#
Letras = "un billon " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
Case Else
Letras = Letras(Int(Valor / 1000000000000#)) & " billones"
If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) Then
Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
End If
End Select
End Function
Nota. La funcion no es de mi autoria, tampoco se de quien es. Estuvo dando vuelta en los foros hace un tiempo.
Eso es todo amigos.
No hay comentarios.:
Publicar un comentario