Compartir a través de

Convertir numeros a letras

Anónimas
2014-07-23T16:29:28+00:00

como convertir numero a letras por ejemplo 1407000006349150 asi de largo

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios
Respuesta aceptada por el autor de la pregunta
  1. Anónimas
    2014-10-23T18:42:21+00:00

    Hola IVANZzZ:

    Debes tener en cuenta las observaciones de Héctor Miguel.

    Yo utilizó la siguiente función que te va a funcionar bien hasta con 15 dígitos, pero la puedes modificar para números con más dígitos, lo puedes manejar con una cadena de texto y unir los resultados.

    C12 = 1407000006349150

    =SI((LARGO(C12)-15)>=1,NumLetras(EXTRAE(C12,1,LARGO(C12)-15)&"000")&" "&NumLetras(EXTRAE(C12,LARGO(C12)-14,15)),NumLetras(C12))

    Un mil Cuatrocientos siete billones seis millones trescientos cuarenta y nueve mil ciento cincuenta

    La siguiente es la explicación de los argumentos de la función:

    =NumLetras("valor";"singular";"plural";"centavos")

    Resultados:

    NumLetras(1;"PESO";"PESOS";0)=           Un peso

    NumLetras(15,25;"PESO";"PESOS";0)=    Quince pesos

    NumLetras(15,25;"PESO";"PESOS";1)=    Quince pesos con 25/100 

    NumLetras(10732)=                                Diez mil setecientos treinta y dos

    Puedes copiar y pegar la función en un módulo de VBA y utilizarla como una función de excel.

    Función VBA:

    Public Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "", Optional InclCentvs As Boolean = False) As String

        Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero

        Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit

        Dim ValorEntero As Currency

        Valor = Round(Valor, 2)

        lyCantidad = Int(Valor)

        ValorEntero = lyCantidad

        lyCentavos = (Valor - lyCantidad) * 100

        laUnidades = 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")

        laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")

        laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")

        lnNumeroBloques = 1

        Do

            lnPrimerDigito = 0

            lnSegundoDigito = 0

            lnTercerDigito = 0

            lcBloque = ""

            lnBloqueCero = 0

            lcDigito = ""

            For I = 1 To 3

                lnDigito = Right(lyCantidad, 1)

                If lnDigito <> 0 Then

                    Select Case I

                        Case 1

                            lcBloque = " " & laUnidades(lnDigito - 1)

                            lnPrimerDigito = lnDigito

                        Case 2

                            If lnDigito <= 2 Then

                                lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)

                            Else

                                lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque

                            End If

                            lnSegundoDigito = lnDigito

                        Case 3

                            lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque

                            lnTercerDigito = lnDigito

                    End Select

                Else

                    lnBloqueCero = lnBloqueCero + 1

                End If

                lyCantidad = Int(lyCantidad / 10)

                If lyCantidad = 0 Then

                    Exit For

                End If

            Next I

            Select Case lnNumeroBloques

                Case 1

                    NumLetras = lcBloque

                Case 2, 4

                    NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras

                Case 3

                    NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras

                Case 5

                    NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " BILLON", " BILLONES") & NumLetras

            End Select

            lnNumeroBloques = lnNumeroBloques + 1

        Loop Until lyCantidad = 0

        NumLetras = Trim(NumLetras & " " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)) & IIf(InclCentvs, " CON " & Format(Str(lyCentavos), "00") & "/100 ", "")

        NumLetras = UCase(Left(NumLetras, 1)) & LCase(Mid(NumLetras, 2, Len(NumLetras) - 1))

    End Function

    2 personas han encontrado útil esta respuesta.
    0 comentarios No hay comentarios
Respuesta aceptada por el autor de la pregunta
  1. Héctor Miguel 71,595 Puntos de reputación
    2014-07-23T16:35:19+00:00

    la muestra que pones tiene 16 dígitos, la precisión máxima (en todas las versiones) de Excel es de 15

    hasta 15 dígitos significativos, encuentras varias alternativas (con y sin macros) en Este Articulo

    saludos,

    hector.

    2 personas han encontrado útil esta respuesta.
    0 comentarios No hay comentarios

3 respuestas adicionales

Ordenar por: Muy útil
  1. Anónimas
    2016-04-09T16:19:53+00:00

    Estimado

    Vengo utilizando Excel hace muchos años, hasta hace muy poco Excel 2003, ahora he pasado a Excel 2010, ocurre que no puedo conseguir bajar la Función NumLetras y que funcione.

    Ocurre que este nuevo Excel no me permite o no encuentro la forma de como cargar el complemento, lo único que puedo cargar es lo de solver y de allí no logro avanzar, le estaré muy agradecido que me ayude a solucionar este inconveniente, dado que necesito convertir valores numéricos monetarios a letras.

    Saludos

    Miguel Angel Sánchez

    Reconquista - prov. de Santa Fe

    Argtentina

    0 comentarios No hay comentarios
  2. Anónimas
    2014-10-29T18:13:43+00:00

    Hola Claudia:

    Con el código de VBA que transcribí en el mensaje anterior, puedes crear una función y utilizarla como lo explico.

    No se si te surgió algún inconveniente al implementarla.

    Saludos...

    0 comentarios No hay comentarios
  3. Anónimas
    2014-10-29T17:02:07+00:00

    Buenas yo también tengo este problema. 

    En concreto tengo una plataforma donde recojo los precios mediante csv y me interesaría traspasar esos precios a formato texto. La plataforma la podéis ver en gimnasios.es por si puede servir

    Muchas gracias

    0 comentarios No hay comentarios