sábado, 14 de marzo de 2015

En letras

!!! Hola amigos !!!

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