abr 23 2010
Convertir Calificaciones de Número a Texto (Letras) en Excel
Como respuesta a un comentario en este blog, donde se pregunta acerca de la conversión de números a texto para el caso de Calificaciones, he modificado el código para que funcione un poco mejor. Cualquier mejora o adaptación que deseen compartir, será bienvenida y recibida con agrado y entusiasmo por la comunidad.
Basta de palabras, comencemos con el código para la Macro en Excel.
- Seleccionar la celda (vacía) donde se hará la conversión.
- Para Excel 2003, dar clic en Herramientas/Macro/Editor de Visual Basic; para Excel 2007 y Excel 2010, dar clic en la ficha Vista, opción Macro, Ver Macros, escribir el nombre y clic en crear. Con cualquiera de las dos versiones aparece una ventana de nombre Microsoft Visual Basic – Libro1, borra las dos líneas de código que ahí aparecen y pega el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Public Function np(R As Single) As String Dim d1 As String Dim d2 As String Dim i, k As Integer Dim R2, dif As Single R2 = R * 10 dif = R2 - Fix(R2) If dif >= 0.5 Then R2 = R2 + 1 R = Fix(R2) / 10 d1 = Format$(R, "0.0") i = Val(Left$(d1, 2)) k = Val(Right$(d1, 1)) d1 = digito(i) d2 = digito(k) np = d1 + " punto " + d2 End Function Function digito(ByVal j As Integer) As String Select Case j Case 0 digito = "Cero" Case 1 digito = "Uno" Case 2 digito = "Dos" Case 3 digito = "Tres" Case 4 digito = "Cuatro" Case 5 digito = "Cinco" Case 6 digito = "Seis" Case 7 digito = "Siete" Case 8 digito = "Ocho" Case 9 digito = "Nueve" Case 10 digito = "Diez" End Select End Function |
- Guardas los cambios y cierras la ventana Microsoft Visual Basic.
- Da clic en el ícono de Excel Insertar función “fx”, aparece una ventana en la cual debes buscar np, cuando salga la seleccionamos y damos clic en aceptar, en la siguiente ventana escribimos la celda que contiene el número a convertir, por ejemplo “e5″. También puedes escribir =np(celda), como ejemplo =np(e5).
- Ahora presionas ENTER y disfrútalo.





ene 25, 2012 @ 13:13:15
las dos funciones son crrecta en el caso de poner cal. y de pasar de numeros a letras.
dic 14, 2011 @ 19:15:06
estoy haciento todos los pasos y me aparece punto cero, me podran ayudar? grs
dic 14, 2011 @ 17:13:20
hola, son muy util tus trucos de excel, pero en cuanto a las primeras declaraciones que colotaste me dice “punto cero” independientemente sea cual sea la cifra que coloque, en cuanto a la segunda me dice “#¿NOMBRE?” no se si estoy haciendo algo mal? agradeceria tu respuesta me interesa esa erramienta de pasar de cifra a texto. la necesito para unas activiades y necesito ahorrar tiempo. Gracias.
nov 19, 2011 @ 12:51:16
Dos preguntas:
1) Si quiero que me sigua dando los numeros despues del diez tengo que escribir Case 11…?
2) Si yo tengo en A1 el número 8 y la funcion np en A2 no me salga Ocho punto cero, sino que me salga Ocho.
Esperando que me respondan mis dudas
Gracias
P.D.: Muy útil la información
ago 21, 2011 @ 18:32:49
como hago para que solo escriba como texto los numeros entros y los decimales sigan en numero y con barra de porcentaje, por ejemplo 7,32 Siete, 32/100
nov 11, 2011 @ 14:29:18
Hola. Pon esto en un modulo nuevo de Excel:
—————————————————————
Function Letras(x)
Nu = Array(“cero”, “uno”, “dos”, “tres”, “cuatro”, “cinco”, _
“seis”, “siete”, “ocho”, “nueve”, “diez”, “once”, “doce”, _
“trece”, “catorce”, “quince”, “dieciseis”, “diecisiete”, _
“dieciocho”, “diecinueve”, “veinte”, “ventiuno”, “ventidos”, _
“veintitres”, “veinticuatro”, “veinticinco”, “veintiseis”, _
“veintisiete”, “veintiocho”, “veintinueve”)
Nd = Array(“”, “”, “”, “treinta”, “cuarenta”, “cincuenta”, _
“sesenta”, “setenta”, “ochenta”, “noventa”)
Nc = Array(“”, “ciento”, “doscientos”, “trescientos”, “cuatrocientos”, _
“quinientos”, “seiscientos”, “setecientos”, “ochocientos”, _
“novecientos”)
u = x Mod 10
d = Int(x / 10) Mod 10
c = Int(x / 100)
If d > 2 Then
Letras = Nd(d) + ” y ” + Nu(u)
Else
u = d * 10 + u
Letras = Nu(u)
End If
If u = 0 Then Letras = Nd(d)
If c > 0 Then Letras = Nc(c) + ” ” + Letras
If x = 100 Then Letras = “cien”
End Function
Function enletras(x)
centavos = Int(x * 100) Mod 100
x = Int(x)
grupo1 = x Mod 1000
grupo2 = Int(x / 1000) Mod 1000
grupo3 = Int(x / 1000000)
n = Letras(grupo3)
If Right(n, 3) = “uno” Then
enletras = Left(n, Len(n) – 1) + ” millones”
Else
If grupo3 = 1 Then enletras = “un millon ”
End If
If grupo3 = 1 Then enletras = “un millon ”
n = Letras(grupo2)
If Right(n, 3) = “uno” Then
enletras = enletras + Left(n, Len(n) – 1) + ” mil”
Else
If grupo2 > 0 Then enletras = enletras + n + ” mil ”
End If
If grupo1 > 0 Then enletras = enletras + Letras(grupo1)
If centavos > 0 Then enletras = enletras + ” con ” + Str(centavos) + “/00″
End Function
—————————————————————–
Saludos Dogo4
jul 14, 2011 @ 20:05:22
Muy bueno, muchas gracias. Solo que a mi también me sale la palabra “punto cero”. Investigaré como corregir eso, para que funcione como debe
feb 15, 2012 @ 17:44:37
Ingresa a la macro nuevamente y donde diga lo siguiente:
np = d1 + ” punto ” + d2
debes borra desde + “punto” + d2
y solo debe quedarte asi:
np = d1
grabas y solucionado!
Saludos =)
jul 07, 2011 @ 10:24:42
HOLA, HICE LO QUE DIJISTE PERO ME SALIÓ ¿NOMBRE?
NO SÉ QUE ESTOY HACIENDO MAL, AYUDA POR FAVOR.
jun 19, 2010 @ 21:55:18
Excelente sitio. espero puedan solucionar pronto ya q es muy util esta funcion
may 25, 2010 @ 11:51:00
Vateos:: Tengo un inconveniente… Excel 2007… hice todo los pasos pero me deshabilito el movimiento con el teclado celda a celda… me explico; al mover la fecla iz o der, me mueve toda la hoja y no se desplaza de celda en celda… que hago??
may 14, 2010 @ 09:43:58
HOLA, DISCULPA LA MOLESTIA, PERO PEGUE IGUAL QUE ME DICES, PERO ME SALE PUNTO CERO Y PORQUE? GRACIAS POR GRANDE AYUDA
may 14, 2010 @ 11:05:34
Hola NAN:
En cuanto pueda trataré de resolver esto que planteas, de momento no lo puedo hacer, pero cuando lo tenga, aquí lo pondré para todos.
Saludos.
abr 28, 2010 @ 16:20:41
es genial pon mas trucos de excel, por eso me gusta este blog porque hay muchas cosas muy buenas para aprender