Macro para pasar de números a letras - VBA Excel
Hace algunos ayeres me encontré en la web una función en VBA Excel que
nos ayuda a pasar a los números a letra, en su momento a mi me fue muy útil,
espero que a ustedes también les sirva.
Dicha función se llama: NumLetras, y solo se tiene que seleccionar
la celda que contiene el valor que queremos convertir.
Para que la función funcione hay que seguir los siguientes pasos:
1. Abrir el editor Visual Basic para Aplicaciones (VBA).
2. Insertar un módulo.
3. Pegar el siguiente código:
Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "MN") As String Dim Cantidad As Currency, Centavos As Currency, Digito As Byte, PrimerDigito As Byte, SegundoDigito As Byte, TercerDigito As Byte, Bloque As String, NumeroBloques As Byte, BloqueCero Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant Dim ValorEntero As Long Dim ValorOriginal As Double Valor = Round(Valor, 2) Cantidad = Int(Valor) ValorEntero = Cantidad Centavos = (Valor - Cantidad) * 100 Unidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE") Decenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA") Centenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS") NumeroBloques = 1 Do PrimerDigito = 0 SegundoDigito = 0 TercerDigito = 0 Bloque = "" BloqueCero = 0 For I = 1 To 3 Digito = Cantidad Mod 10 If Digito <> 0 Then Select Case I Case 1 Bloque = " " & Unidades(Digito - 1) PrimerDigito = Digito Case 2 If Digito <= 2 Then Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1) Else Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " Y", Null) & Bloque End If SegundoDigito = Digito Case 3 Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "CIEN", Centenas(Digito - 1)) & Bloque TercerDigito = Digito End Select Else BloqueCero = BloqueCero + 1 End If Cantidad = Int(Cantidad / 10) If Cantidad = 0 Then Exit For End If Next I Select Case NumeroBloques Case 1 NumLetras = Bloque Case 2 NumLetras = Bloque & IIf(BloqueCero = 3, Null, " MIL") & NumLetras Case 3 NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito = 0, " MILLON", " MILLONES") & NumLetras End Select NumeroBloques = NumeroBloques + 1 Loop Until Cantidad = 0 If Valor >= 1000000000 Then Dim millardos As Currency Dim millarodsInt As Integer Dim letras_Millardos As String millarodsInt = Int(Valor / 1000000000) millardos = millarodsInt letras_Millardos = Replace(Trim(NumLetras(millardos)), "00/100", IIf(millarodsInt = 1, "MIL MILLONES", "MIL MILLONES")) NumLetras = letras_Millardos & NumLetras End If NumLetras = Trim(NumLetras) & " " & Format(Str(Centavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural) End Function
excelente aporte.
ResponderBorrarmuchas gracias por tu visita.
BorrarSaludos!!
Gracias, gracias. Me sirvió el código 100%
ResponderBorrarMe da mucho gusto que te haya funcionado. Gracias por visita
BorrarLo usé en access y funcionó perfectamente.
ResponderBorrarExcelente me da mucho gusto!! Gracias por tu visita
Borrarmuchas gracias, Excelente
ResponderBorraral contrario, gracias a ti por visitar el blog
BorrarME SIRVIO MUCHO, GRACIAS.
ResponderBorrarde nada, gracias a ti por visitar el blog, vuelve pronto
BorrarMuchas gracias, programa muy eficiente!!!
ResponderBorrarMe da mucho gusto que te haya servido, regresa pronto al blog
Borrarhola me funciona de maravilla pero cuando cuando tengo cantidades de DOS MILLARDOS no los convierte en letra cual seria la solucion
ResponderBorrar¡Excelente! gracias por compartir
ResponderBorrargracias a ti por tu visita!!
BorrarQUE CAMBIO PODRIA HACER PARA QUE FUNCIONE CON NUMEROS
ResponderBorrarNEGATIVOS?
te recomiendo concatenar el signo o la palabra que quieres que salga
BorrarEs excelente!
ResponderBorrargracias por tu visita!!
BorrarHola, si quisiera que al final salga la palabra SOLES, como debo hacer? ya que el resultado me arroja MN al final
ResponderBorrartienes que buscar "MN" esta al principio, y lo cambias.
BorrarMUCHAS GRACIAS
ResponderBorrarDisculpa como puede hacer para que entes de los centavos venga la palabra PESOS
ResponderBorrartienes que cambiar esto:
BorrarNumLetras = Trim(NumLetras) & " " & Format(Str(Centavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
por esto:
NumLetras = Trim(NumLetras) & " " & Format(Str(Centavos), "Pesos 00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
Buenos dias
ResponderBorrarAl utilizar la macro el numero es este 6749,62 y me lee seis mil setecientos cuarenta y nueve 62/100.
Habría forma de cambiar el 62/100 por "con sesenta y dos"
muchas gracias