Convertir números a letra sin monto monetario

No soy muy bueno en exel, y todos los macros que e encontrado no me ayudan por lo siguiente

Tengo este numero y lo quiero convertir en letras ejemplo 1234567890,2008,03 (uno)(dos)(tres)(cuatro)(cinco)(seis)(siete)(ocho)(nueve)(cero) (dos mil ocho) (cero cero)

Ojo: que la como valga como un espacio

Ojala y me puedasechar la mano te lo agradeceria mucho

2 Respuestas

Respuesta
3

¿El resultado de las letras lo quieres entre paréntesis?

¿Siempre tienes 2 comas?

Siempre el segundo número lo quieres completo, es decir, pusiste en tu ejemplo 2008, ¿en ese caso quieres como resultado dos mil ocho?

Entonces, en todos los demás casos solamente quieres la descripción dígito por dígito.

Ayudaría si pones un par de ejemplos más y exactamente cómo quieres el resultado.

es correcto lo que esta en parentesis  es el resultado que necesito, y el formato siempre tiene 2 coma y el segundo dato que este entre las dos comas siempre es el año  en letra  yasea 1996,2000,2007,2017.

ese dato que te estoy poniendo en el numero de ife, año de registro que viene siendo este dato 1234567890,2008,03 (uno)(dos)(tres)(cuatro)(cinco)(seis)(siete)(ocho)(nueve)(cero) (dos mil ocho) (cero cero), este formato nunca va a cambiar siempre es igua

pero tambien lleva la hora  con numero y letra

17:30 (diecisiete treinta horas)

y si no es mucha moles  si en una celda tengo 2 que me muestre (dos)

¡Gracias! 

¿Pero quieres que yo ponga (uno) el texto uno entre paréntesis?

O simplemente ponga uno

El texto que valla en paréntesis (uno)

Perdona, pero ya no entendí, en la celda tienes esto:

1234567890,2008,03

O esto:

17:30

O esto

2

O esto:

1234567890,2008,03 17:30

¿O qué posibles datos puedes traer?

todo va en celdas ceparadas

esto va en un celda 1234567890,2008,03

esto va en otra celda 17:30

en otra celda 2

saludos

Pon el siguiente código de Función en un módulo

Function PonerLetras(celda As Range) As String
'Por.Dante Amor
    If InStr(1, celda.Value, ",") > 0 Then
        nums = Split(celda.Value, ",")
        If UBound(nums) = 2 Then
            uno = nums(0)
            dos = nums(1)
            tre = nums(2)
            cad = ""
            For i = 1 To Len(uno)
                cad = cad & "(" & num(Mid(uno, i, 1)) & ")"
            Next
            cad = cad & " (" & num(Val(dos)) & ") "
            For i = 1 To Len(tre)
                cad = cad & "(" & num(Mid(tre, i, 1)) & ")"
            Next
            PonerLetras = cad
        Else
            PonerLetras = "No hay 3 números separados por comas"
        End If
    ElseIf InStr(1, celda.Value, ":") > 0 Then
        nums = Split(celda.Value, ":")
        If UBound(nums) = 1 Then
            uno = nums(0)
            dos = nums(1)
            cad = ""
            cad = cad & "(" & num(Val(uno)) & " " & num(Val(dos)) & " horas)"
            PonerLetras = cad
        Else
            PonerLetras = "No hay 2 números separados por dos puntos"
        End If
    ElseIf IsNumeric(celda.Value) Then
        cad = num(celda.Value)
        PonerLetras = cad
    End If
End Function
'
Function num(fec As Long) As String
    'Por.Dante Amor
Unidades = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'
Select Case fec
    Case 0: r = "Cero"
    Case 1 To 29: r = Unidades(fec)
    Case 30 To 100: r = Decenas(fec \ 10) + IIf(fec Mod 10 <> 0, " y " + num(fec Mod 10), "")
    Case 101 To 999: r = Centenas(fec \ 100) + IIf(fec Mod 100 <> 0, " " + num(fec Mod 100), "")
    Case 1000 To 1999: r = "Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "")
    Case 2000 To 999999: r = num(fec \ 1000) + " Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "")
    Case 1000000 To 1999999: r = "Un Millón" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "")
    Case 2000000 To 1999999999: r = num(fec \ 1000000) + " Millones" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "")
End Select
num = r
End Function

Sigue las Instrucciones para una Función

  1. Abre tu libro de excel
  2. Para abrir VBa y poder pegar la función, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la función
  5. En cualquier celda utiliza la función, como cualquier otra función de excel

Por ejemplo, si en la celda C4 tienes el número

1234567890,2008,03

, entonces en la celda D4 pon la siguiente fórmula:

=PonerLetras(C4)

El resultado será:

(Uno)(Dos)(Tres)(Cuatro)(Cinco)(Seis)(Siete)(Ocho)(Nueve)(Cero) (Dos Mil Ocho) (Cero)(Tres)

Para el caso de 19:37, deberás tener en la celda el dato como texto.

Si realmente tienes una hora, es decir, en la celda tienes esto: 19:37, pero en la barra de fórmulas ves esto: 07:37:00 p.m., entonces significa que tienes una hora y no un texto, en este caso utiliza el siguiente código:

Function PonerLetras(celda As Range) As String
'Por.Dante Amor
    If InStr(1, celda.Value, ",") > 0 Then
        nums = Split(celda.Value, ",")
        If UBound(nums) = 2 Then
            uno = nums(0)
            dos = nums(1)
            tre = nums(2)
            cad = ""
            For i = 1 To Len(uno)
                cad = cad & "(" & num(Mid(uno, i, 1)) & ")"
            Next
            cad = cad & " (" & num(Val(dos)) & ") "
            For i = 1 To Len(tre)
                cad = cad & "(" & num(Mid(tre, i, 1)) & ")"
            Next
            PonerLetras = cad
        Else
            PonerLetras = "No hay 3 números separados por comas"
        End If
    ElseIf Hour(celda.Value) > 0 Then
        cad = ""
        cad = cad & "(" & num(Hour(celda.Value)) & " " & num(Minute(celda.Value)) & " horas)"
        PonerLetras = cad
    ElseIf IsNumeric(celda.Value) Then
        cad = num(celda.Value)
        PonerLetras = cad
    End If
End Function
'
Function num(fec As Long) As String
    'Por.Dante Amor
Unidades = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'
Select Case fec
    Case 0: r = "Cero"
    Case 1 To 29: r = Unidades(fec)
    Case 30 To 100: r = Decenas(fec \ 10) + IIf(fec Mod 10 <> 0, " y " + num(fec Mod 10), "")
    Case 101 To 999: r = Centenas(fec \ 100) + IIf(fec Mod 100 <> 0, " " + num(fec Mod 100), "")
    Case 1000 To 1999: r = "Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "")
    Case 2000 To 999999: r = num(fec \ 1000) + " Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "")
    Case 1000000 To 1999999: r = "Un Millón" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "")
    Case 2000000 To 1999999999: r = num(fec \ 1000000) + " Millones" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "")
End Select
num = r
End Function

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Amigo muchas gracias

De ante mano te agradezco

Un fuerte abrazo

¡Mil Gracias!

Al final de mi respuesta hay dos botones para valorar la respuesta "Voto" y "Excelente", si solamente votaste la respuesta, puede ser que tienes alguna duda.

Respuesta
1

. 14.03.17 #VBA De número a palabra

Es posible resolver esta cuestión con fórmulas de búsqueda (BUSCARV) o utilizando una Función definida por el usuario (UDF) que implica aprovechar la potencia de Visual Basic.

Sin embargo, explicarlo aquí sería sumamente difícil, créeme.

Usualmente propongo lo siguiente:

Envíame un mail y, apenas llegue, te mandaré -a tu casilla- un archivo de MS Excel que tiene resuelto el problema con ambas alternativas.

.

Añade tu respuesta

Haz clic para o