



En ocasiones necesitamos convertir el valor de número en texto, para euros en Excel, para ello crearemos una función UDF.

Disponemos en la columna A el valor numérico que deseamos convertir a texto en la columna B.
A | B | |
---|---|---|
1 | Número | Texto |
2 | 1,00 | |
3 | 13,52 | |
4 | 123,50 | |
5 | 2.225,30 | |
6 | 154.650,00 |
- CREAR LA FUNCIÓN
Con Excel abierto.
Pulsar la tecla Alt y mantener pulsada
Pulsar la tecla F11. Mostrará el editor de Visual Basic.
Ir a: Barra de Menú
Insertar
Módulo. Mostrará la ventana del módulo donde escribimos la función.
Escribir el código:
Option Explicit
Function NumeroLetra(ByVal Valor)
Dim Unidad, Decimas, Temp
Dim Moneda, Separador As String
Dim PosicionDecimal, Cuenta
Dim origNumLen, origNum
Moneda = "Euros"
Separador = ","ReDim Resultado(9) As String
Resultado(2) = " Mil "
Resultado(3) = " Millones "
Resultado(4) = " Billones "
Resultado(5) = " Trillones "Valor = Trim(CStr(Valor))
origNumLen = Len(Valor)
origNum = ValorIf Separador = "," Then PosicionDecimal = InStr(Valor, ",")
If PosicionDecimal > 0 ThenDecimas = Decenas(Left(Mid(Valor, PosicionDecimal + 1) & "00", 2))
Valor = Trim(Left(Valor, PosicionDecimal - 1))End If
Cuenta = 1
Do While Valor <> ""
Temp = Centenas(Right(Valor, 3))
If Temp <> "" Then
If Temp = "UN" And Cuenta > 2 ThenUnidad = Temp & Left(Resultado(Cuenta), Len(Resultado(Cuenta)) - 3) & " " & Unidad
Else
Unidad = Temp & Resultado(Cuenta) & Unidad
End If
End If
If Len(Valor) > 3 ThenValor = Left(Valor, Len(Valor) - 3)
Else
Valor = ""
End If
Cuenta = Cuenta + 1
Loop
Select Case Unidad
Case "": Unidad = "Cero " & Moneda
Case "UN": Unidad = "Un " & Left(Moneda, Len(Moneda) - 1)
Case ElseIf origNumLen > 6 And (origNum Mod 1000000) = 0 Then
Unidad = Unidad & " " & "de " & Moneda
Else
Unidad = Unidad & " " & Moneda
End If
End SelectSelect Case Decimas
Case "": Decimas = " con cero Centimos"
Case "One": Decimas = " con un Centimo"
Case Else
Decimas = " con " & Decimas & " Centimos"
End SelectNumeroLetra = UCase(Trim(Unidad & Decimas))
End Function
Private Function Unidades(DigitoTexto)
Select Case Val(DigitoTexto)
Case 1: Unidades = "Un"
Case 2: Unidades = "Dos"
Case 3: Unidades = "Tres"
Case 4: Unidades = "Cuatro"
Case 5: Unidades = "Cinco"
Case 6: Unidades = "Seis"
Case 7: Unidades = "Siete"
Case 8: Unidades = "Ocho"
Case 9: Unidades = "Nueve"
Case Else: Unidades = ""
End SelectEnd Function
Private Function Decenas(DecenasTexto)
Dim Resultado As String
Resultado = ""If Val(Left(DecenasTexto, 1)) = 1 Then ' If value between 10-19...
Select Case Val(DecenasTexto)Case 10: Resultado = "Diez"
Case 11: Resultado = "Once"
Case 12: Resultado = "Doce"
Case 13: Resultado = "Trece"
Case 14: Resultado = "Catorce"
Case 15: Resultado = "Quince"
Case 16: Resultado = "Diez y seis"
Case 17: Resultado = "Diez y siete"
Case 18: Resultado = "Diez y ocho"
Case 19: Resultado = "Diez y nueve"Case Else
End Select
ElseIf Val(Right(DecenasTexto, 1)) = 0 Then
Select Case Val(Left(DecenasTexto, 1))
Case 2: Resultado = "Veinte"
Case 3: Resultado = "Treinta"
Case 4: Resultado = "Cuarenta"
Case 5: Resultado = "Cincuenta"
Case 6: Resultado = "Sesenta"
Case 7: Resultado = "Setenta"
Case 8: Resultado = "Ochenta"
Case 9: Resultado = "Noventa"
Case Else
End SelectElse
Select Case Val(Left(DecenasTexto, 1))
Case 2: Resultado = "Veinti"
Case 3: Resultado = "Treinta y "
Case 4: Resultado = "Cuarenta y "
Case 5: Resultado = "Cincuenta y "
Case 6: Resultado = "Sesenta y "
Case 7: Resultado = "Setenta y "
Case 8: Resultado = "Ochenta y "
Case 9: Resultado = "Noventa y "
Case Else
End SelectEnd If
Resultado = Resultado & Unidades _
(Right(DecenasTexto, 1)) ' Retrieve ones Resultado.End If
Decenas = Resultado
End Function
Private Function Centenas (ByVal Valor)
Dim Resultado As StringIf Val(Valor) = 0 Then Exit Function
Valor = Right("000" & Valor, 3)If Mid(Valor, 1, 1) <> "0" Then
If Valor = "100" ThenResultado = "Cien "
Else
Select Case Mid(Valor, 1, 1)
Case 1
Select Case Len(Valor)Case 1: Resultado = "Un "
Case 3: Resultado = "Ciento "
Case 4: Resultado = ""
Case 6: Resultado = "Ciento "
Case 9: Resultado = "Ciento "End Select
Case 2: Resultado = "Doscientos "
Case 3: Resultado = "Trescientos "
Case 4: Resultado = "Cuatrocientos "
Case 5: Resultado = "Quinientos "
Case 6: Resultado = "Seiscientos "
Case 7: Resultado = "Setecientos "
Case 8: Resultado = "Ochocientos "
Case 9: Resultado = "Novecientos "End Select
End If
End IfIf Mid (Valor, 2, 1) <> "0" Then
Resultado = Resultado & Decenas(Mid(Valor, 2))
Else
Resultado = Resultado & Unidades(Mid(Valor, 3))
End If
Centenas = Resultado
End Function
Guardar el libro con la extensión *.xlsm. Libro habilitado para macros.
- APLICAR LA FUNCIÓN
Seleccionar la celda B2. Celda donde insertar la función.
Ir a: Cinta de opciones
Pestaña: Fórmulas
Grupo: Biblioteca de funciones
Insertar función
. Mostrará la ventana de mostrar función.
Ir a: O seleccionar una categoría
Seleccionar: Definida por el usuario. Categoría deseada de nuestra función.
Ir a: Seleccionar una función
Clic sobre NumeroLetra. Función deseada.
Pulsar el botón Aceptar. Cierra la ventana y muestra la ventana de argumentos.
Ir a: Valor
Clic sobre la celda B2.
Pulsar el botón Aceptar. Cierra la ventana e inserta la función.
O también, Escribir:
=NumeroLetra(A1)Copiar la celda B2 y pegar en el rango B3:B6.


Hola me podrían ayudar con una macro para convertir promedios en letras
Por ejemplo
80 ochenta
100 cien
Esto lo usamos comúnmente en colegios ayudenme se los agradecería mucho bendiciones
Hola José,
Revisa el post sguiente
Saludos.