Cómo convierto fechas a texto

scano

New Member
Joined
Oct 28, 2002
Messages
7
Deseo que al introducir una fecha en una celda, en otra aparezca su equivalente en texto. Ejemplo:
Que al introducir en la celda A1 la fecha 18-06-1966, en la celda A2 aparezca DIECIOCHO DE JUNIO DE MIL NOVECIENTOS SESENTA Y SEIS
He buscado y buscado sin suerte.
Si lo que digo es una barbaridad, por favor también diganmelo. Por cierto, alguien sabe porque DATEIF() está disponible en la versión en ingles pero no en la version en español de excel?
 

Excel Facts

Round to nearest half hour?
Use =MROUND(A2,"0:30") to round to nearest half hour. Use =CEILING(A2,"0:30") to round to next half hour.
Es una barbaridad ! :razz: No, mentiras, pero nunca había visto esa pregunta... depronto con la función que puso Roberto se puede hacer algo.

En cuanto a lo otro, la función sí existe en español, solo que con otro nombre, creo que es algo como SI.FECHA, voy a buscarla ahora.
 
Upvote 0
Gracias por tu atención Juan Pablo,

Vi el código de roberto, y encontré elgo semejante en http://www.e-mision.net/crazyhouse/servicios/msgforo.asp?q=20020810060655&o=A , pero es para Visual Basic, dice:

´Copia todo esto en un modulo y te permitira
´un calculo exacto en años, meses y dias enviandole
´dos fechas,
´ lo acabo de hacer, si tenes alguna duda preguntame via mail

Option Explicit
Dim X As Integer
Dim Años, Meses, Dias As Integer
Dim AMayor, AMenor As Date
Dim MMayor, MMenor As Date
Public Function Diferencia(Fecha1 As Date, Fecha2 As Date) As String

If Year(Fecha1) >= Year(Fecha2) Then
AMayor = Fecha1
AMenor = Fecha2
Else
AMayor = Fecha2
AMenor = Fecha1

End If

´ Diferencia de meses
Meses = 0
For X = 0 To 22
If Month(AMenor) + X < 12 Then
If Month(AMayor) = Month(AMenor) + X Then
Exit For
Else
Meses = Meses + 1
End If
Else
If Month(AMayor) = Month(AMenor) + X - 12 Then
Exit For
Else
Meses = Meses + 1
End If
End If
Next


´ Diferencia de años
Años = Year(AMayor) - Year(AMenor) - 1
If Años = -1 Then
Años = 0
End If
´ Diferencia de dias
If Day(AMayor) >= Day(AMenor) Then
Dias = Day(AMayor) - Day(AMenor)
Else
Dias = Day(AMenor) - Day(AMayor)
Meses = Meses - 1
End If
Diferencia = Años & " años " & Meses & " meses y " & Dias & " dias"
End Function
---

Repito: tengo excel en español y ni idea de cómo adaptar el código. Alguna sugerencia?
Gracias anticipadas.
 
Upvote 0
Aparentemente, no hay necesidad de adaptar el código. Simplemente copiarlo en un módulo (estándar, no de clase), y ya se puede usar la función directamente en Excel.
 
Upvote 0
Mmmm, entiendo lo que dices Juan Pablo
respecto a los códigos,sin embargo, cuando digo "adaptarlo", me refiero a que el resultado que busco no es la diferencia entre dos fechas en años, meses y días (como resuelve el código); lo que busco es trasladar una fecha cualquiera en su equivalente texto.

Tengo una idea que voy a desarrollar a partir de los ejemplos ya vistos.

Gracias de nuevo por tu atención y comentarios.
 
Upvote 0
Bueno, esto parece funcionar, aunque hoy, aparece como

UNO DE NOVIEMBRE DE DOS MIL DOS

El código de Numero_A_Letras lo encontré AQUI<pre>'Convierte 0< Numero< 1.000.000.000
Private Function Numeros_A_Letras(Numero As Double) As String
Dim Letras As String
Dim HuboCentavos As Boolean
Dim Decimales As Double
Decimales = Numero - Int(Numero)
Numero = Int(Numero)
Dim Numeros(90) As String
Numeros(0) = "cero"
Numeros(1) = "uno"
Numeros(2) = "dos"
Numeros(3) = "tres"
Numeros(4) = "cuatro"
Numeros(5) = "cinco"
Numeros(6) = "seis"
Numeros(7) = "siete"
Numeros(8) = "ocho"
Numeros(9) = "nueve"
Numeros(10) = "diez"
Numeros(11) = "once"
Numeros(12) = "doce"
Numeros(13) = "trece"
Numeros(14) = "catorce"
Numeros(15) = "quince"
Numeros(20) = "veinte"
Numeros(30) = "treinta"
Numeros(40) = "cuarenta"
Numeros(50) = "cincuenta"
Numeros(60) = "sesenta"
Numeros(70) = "setenta"
Numeros(80) = "ochenta"
Numeros(90) = "noventa"
Do
'*---> Centenas de Millón
If (Numero< 1000000000) And (Numero >= 100000000) Then
If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000))< 1000000) Then
Letras = Letras & "cien millones "
Else
Select Case Int(Numero / 100000000)
Case 1
Letras = Letras & "ciento"
Case 5
Letras = Letras & "quinientos"
Case 7
Letras = Letras & "setecientos"
Case 9
Letras = Letras & "novecientos"
Case Else
Letras = Letras & Numeros(Int(Numero / 100000000))
End Select
If (Int(Numero / 100000000)<> 1) And (Int(Numero / 100000000)<> 5) And (Int(Numero / 100000000)<> 7) _
And (Int(Numero / 100000000)<> 9) Then
Letras = Letras & "cientos "
Else
Letras = Letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000000) * 100000000)
End If
'*---> Decenas de Millón
If (Numero< 100000000) And (Numero >= 10000000) Then
If Int(Numero / 1000000)< 16 Then
Letras = Letras & Numeros(Int(Numero / 1000000))
Letras = Letras & " millones "
Numero = Numero - (Int(Numero / 1000000) * 1000000)
Else
Letras = Letras & Numeros(Int(Numero / 10000000) * 10)
Numero = Numero - (Int(Numero / 10000000) * 10000000)
If Numero > 1000000 Then
Letras = Letras & " y "
End If
End If
End If
'*---> Unidades de Millón
If (Numero< 10000000) And (Numero >= 1000000) Then
If Int(Numero / 1000000) = 1 Then
Letras = Letras & " un millón "
Else
Letras = Letras & Numeros(Int(Numero / 1000000))
Letras = Letras & " millones "
End If
Numero = Numero - (Int(Numero / 1000000) * 1000000)
End If
'*---> Centenas de Millar
If (Numero< 1000000) And (Numero >= 100000) Then
If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000))< 1000) Then
Letras = Letras & "cien mil "
Else
Select Case Int(Numero / 100000)
Case 1
Letras = Letras & "ciento"
Case 5
Letras = Letras & "quinientos"
Case 7
Letras = Letras & "setecientos"
Case 9
Letras = Letras & "novecientos"
Case Else
Letras = Letras & Numeros(Int(Numero / 100000))
End Select
If (Int(Numero / 100000)<> 1) And (Int(Numero / 100000)<> 5) And (Int(Numero / 100000)<> 7) _
And (Int(Numero / 100000)<> 9) Then
Letras = Letras & "cientos "
Else
Letras = Letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100000) * 100000)
End If
'*---> Decenas de Millar
If (Numero< 100000) And (Numero >= 10000) Then
If Int(Numero / 1000)< 16 Then
Letras = Letras & Numeros(Int(Numero / 1000))
Letras = Letras & " mil "
Numero = Numero - (Int(Numero / 1000) * 1000)
Else
Letras = Letras & Numeros(Int(Numero / 10000) * 10)
Numero = Numero - (Int((Numero / 10000)) * 10000)
If Numero > 1000 Then
Letras = Letras & " y "
Else
Letras = Letras & " mil "
End If
End If
End If
'*---> Unidades de Millar
If (Numero< 10000) And (Numero >= 1000) Then
If Int(Numero / 1000) = 1 Then
Letras = Letras 'Letras & "un"
Else
Letras = Letras & Numeros(Int(Numero / 1000))
End If
Letras = Trim(Letras & " mil") & " "
Numero = Numero - (Int(Numero / 1000) * 1000)
End If
'*---> Centenas
If (Numero< 1000) And (Numero > 99) Then
If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100))< 1) Then
Letras = Letras & "cien "
Else
Select Case Int(Numero / 100)
Case 1
Letras = Letras & "ciento"
Case 5
Letras = Letras & "quinientos"
Case 7
Letras = Letras & "setecientos"
Case 9
Letras = Letras & "novecientos"
Case Else
Letras = Letras & Numeros(Int(Numero / 100))
End Select
If (Int(Numero / 100)<> 1) And (Int(Numero / 100)<> 5) And (Int(Numero / 100)<> 7) _
And (Int(Numero / 100)<> 9) Then
Letras = Letras & "cientos "
Else
Letras = Letras & " "
End If
End If
Numero = Numero - (Int(Numero / 100) * 100)
End If
'*---> Decenas
If (Numero< 100) And (Numero > 9) Then
If Numero< 16 Then
Letras = Letras & Numeros(Int(Numero))
Numero = Numero - Int(Numero)
Else
Letras = Letras & Numeros(Int((Numero / 10)) * 10)
Numero = Numero - (Int((Numero / 10)) * 10)
If Numero > 0.99 Then
Letras = Letras & " y "
End If
End If
End If
'*---> Unidades
If (Numero< 10) And (Numero > 0.99) Then
Letras = Letras & Numeros(Int(Numero))
Numero = Numero - Int(Numero)
End If
Loop Until (Numero = 0)
'*---> Decimales
If (Decimales > 0) Then
Letras = Letras & " con "
Letras = Letras & Format(Decimales * 100, "00") & "/100 centavos"
End If
Numeros_A_Letras = Letras '"pesos " & Letras
End Function

Function FechaALetras(Fecha As Double) As String
Dim tmp As String
'Dia
tmp = Numeros_A_Letras(Day(Fecha)) & " de "
'Mes
tmp = tmp & Format(Fecha, "mmmm") & " de "
'Año
tmp = tmp & Numeros_A_Letras(Year(Fecha))
FechaALetras = UCase(tmp)
End Function</pre>Espero que sirva.

_________________
Regards,

Juan Pablo G.
MrExcel.com Consulting
This message was edited by Juan Pablo G. on 2002-11-01 17:53
 
Upvote 0
Juan Pablo,

Nuevamente agradezco el tiempo que haz dedicado a mi problema.

Como te mencioné en mi anterior mensaje, a estas alturas estoy concluyendo una posible solución a mi problema, la estoy limpiando de errores para presentartela, no es elegante, pero me funciona como necesito. Seguramente alguien con conocimiento más avanzado la podrá implementar desde un modulo de VBA. Intentaré convertirla a código como el que has proporcionado para ver cual funciona mejor.

Por otra parte, déjame te cuento que encontré documentada en la ayuda de Excel el equivalente en español de la función DATEIF(), es SIFECHA() sin embargo no la encuentro en el listado de fechas, de modo que no la puedo usar.

Activé en Herramientas|Complementos la opción Herramientas para análisis y pude acceder a funciones de fecha adicionales, luego active también la opción Herramientas para análisis - VBA y ahora tengo una mezcla de funciones en ingles y español bajo el menu de funciones. Qué desorden!.

Juan Pablo, si con las funciones ahora disponibles desarrollo la hoja como la necesito y la distribuyo, quienes la reciban deberán activar las opciones que yo para que funcione, o no es necesario hacer eso?

Gracias.
scano.
 
Upvote 0
La función SIFECHA funciona sin necesidad del complemento "Herramientas de Analisis". Lo que pasa es que, por alguna razón, la gente de Excel no le gusta "mostrar" la función, pero si se puede utilizar:
Libro1
ABCD
104/11/2002
230/09/2002
335
Hoja1


Ahora, cuando uno utiliza funciones de complementos, y le envía a otra persona el libro, pasan dos cosas:

1) La otra persona tiene el complemento y lo tiene instalado, lo que hace que el libro funcione bien.

2) La otra persona no tiene el complemento y/o no lo tiene instalado, Excel funciona más o menos, porque como no encuentra las funciones, saca el error #¿NOMBRE?, por lo que sí es necesario que la otra persona tenga el complemento instalado si se quiere usar esas funciones.
 
Upvote 0
Caramba Juan Pablo, sí que eres bueno en lo que haces!.

Gracias, ya pude usar el (al menos para mi) problemático SIFECHA().

Estoy retrasado en mostrarte mi propuesta de solución que ya te habia mencionado, porque he tenido mucho trabajo y en casa mi hija de 8 meses enfermó. Espero que mi post dure lo suficiente para mostrar mi hoja de cálculo.

scano.
 
Upvote 0

Forum statistics

Threads
1,223,958
Messages
6,175,628
Members
452,661
Latest member
Nonhle

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top