Formato Fecha

07/07/2005 - 07:56 por gabriel | Informe spam
Hola !

Como configuro una celda para que al ingresar 150805 me devuelva en Formato
de Fecha 08/08/05

Mucha gracias
Gabriel

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
07/07/2005 - 09:19 | Informe spam
hola, gabriel !

Como configuro una celda para que al ingresar 150805 me devuelva en Formato de Fecha 08/08/05



1) habria que 'trabajar en reversa' para que 150805 'regrese' 7 dias a 080805 [es broma] :))
2) las fechas [y horas] en excel son [simples] numeros 'seriales'
3) al introducir en una celda el valor 080805 seria 'convertido' a 80805 [los ceros a la izquierda NO cuentan] ;)
4) 'tendrias que'... usar macros [en los eventos de la hoja] para 'convertir' la entrada al formato dd/mm/aa
-> haz un click-derecho sobre el nombre de 'esa' hoja y selecciona: 'ver codigo...'
[suponiendo que la entrada en 'notacion' ddmmaa ocurre en las celdas del rango 'A1:A5']...
copia/pega las siguientes lineas [son solamente un ejemplo] ;)
en el modulo de codigo de 'esa' hoja ==Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a1:a5")) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Dim dd As Byte, mm As Byte, aa As Byte, Tmp As String
Tmp = Format(Target, "000000")
dd = (Tmp - Mid(Tmp, 4)) / 10000
mm = (Mid(Tmp, 4) - Right(Tmp, 2)) / 100
aa = Right(Tmp, 2)
On Error GoTo Salida
Application.EnableEvents = False
Target = DateSerial(aa, mm, dd)
Target.NumberFormat = "dd/mm/yy"
Salida:
Application.EnableEvents = True
End Sub

si cualquier duda... comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 KL
07/07/2005 - 10:30 | Informe spam
Hola chicos,

Creo que otras alternativas podrian ser:

la de usar la siguiente formula (asumiendo que el texto "080805" esta en la
celda [A1]) en la hoja de calculo directamente:

þCHANUMERO(TEXTO(A1;"00-00-00"))

o el siguiente codigo que ademas maneja cambios a varias celdas a la vez:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, celda As Range
On Error GoTo Salida
Set rng = Intersect(Target, Range("A1:A5"))
Application.EnableEvents = False
For Each celda In rng
If Not IsEmpty(celda) Then
celda = DateValue(Format(celda, "00-00-00"))
celda.NumberFormat = "dd/mm/yy"
End If
Next celda
Salida:
Application.EnableEvents = True
End Sub

Saludos,
KL


"Héctor Miguel" wrote in message
news:
hola, gabriel !

Como configuro una celda para que al ingresar 150805 me devuelva en
Formato de Fecha 08/08/05



1) habria que 'trabajar en reversa' para que 150805 'regrese' 7 dias a
080805 [es broma] :))
2) las fechas [y horas] en excel son [simples] numeros 'seriales'
3) al introducir en una celda el valor 080805 seria 'convertido' a 80805
[los ceros a la izquierda NO cuentan] ;)
4) 'tendrias que'... usar macros [en los eventos de la hoja] para
'convertir' la entrada al formato dd/mm/aa
-> haz un click-derecho sobre el nombre de 'esa' hoja y selecciona: 'ver
codigo...'
[suponiendo que la entrada en 'notacion' ddmmaa ocurre en las celdas
del rango 'A1:A5']...
copia/pega las siguientes lineas [son solamente un ejemplo] ;)
en el modulo de codigo de 'esa' hoja ==> Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("a1:a5")) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Dim dd As Byte, mm As Byte, aa As Byte, Tmp As String
Tmp = Format(Target, "000000")
dd = (Tmp - Mid(Tmp, 4)) / 10000
mm = (Mid(Tmp, 4) - Right(Tmp, 2)) / 100
aa = Right(Tmp, 2)
On Error GoTo Salida
Application.EnableEvents = False
Target = DateSerial(aa, mm, dd)
Target.NumberFormat = "dd/mm/yy"
Salida:
Application.EnableEvents = True
End Sub

si cualquier duda... comentas?
saludos,
hector.

Respuesta Responder a este mensaje
#3 Héctor Miguel
07/07/2005 - 10:55 | Informe spam
hola, KL !

Creo que otras alternativas podrian ser:
... la siguiente formula (asumiendo que el texto "080805" esta en la celda [A1]) en la hoja de calculo directamente:
þCHANUMERO(TEXTO(A1;"00-00-00"))



[supongo que] esta alternativa estara 'limitando' la [posible] 'intencion' de OP de 'automatizar' el proceso -?-

o el siguiente codigo que ademas maneja cambios a varias celdas a la vez:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, celda As Range
On Error GoTo Salida
Set rng = Intersect(Target, Range("A1:A5"))
Application.EnableEvents = False
For Each celda In rng
If Not IsEmpty(celda) Then
celda = DateValue(Format(celda, "00-00-00"))
celda.NumberFormat = "dd/mm/yy"
End If
Next celda
Salida:
Application.EnableEvents = True
End Sub



y para este caso [me temo que] el uso de DateValue(...
-> queda 'sujeto' a los convencionalismos regionales [como el separador de fechas y la secuencia] :-(
por lo que [seguramente] 'fallara' si la entrada [ddmmaa] se realiza en sistemas con 'otras' convenciones :-(

saludos,
hector.
Respuesta Responder a este mensaje
#4 KL
07/07/2005 - 11:13 | Informe spam
Hola HM,

þCHANUMERO(TEXTO(A1;"00-00-00"))


[supongo que] esta alternativa estara 'limitando' la [posible] 'intencion'
de OP de 'automatizar' el proceso -?-



bueno, depende de como se quiere usar las fechas, pero si, de acuerdo.

y para este caso [me temo que] el uso de DateValue(...
-> queda 'sujeto' a los convencionalismos regionales [como el separador de
fechas y la secuencia] :-(
por lo que [seguramente] 'fallara' si la entrada [ddmmaa] se realiza en
sistemas con 'otras' convenciones :-(



pues, que tal esto (si que esta limitado a XL2000 para arriba):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, celda As Range, tmp As Variant
On Error GoTo Salida
Set rng = Intersect(Target, Range("A1:A5"))
Application.EnableEvents = False
For Each celda In rng
If Not IsEmpty(celda) Then
tmp = Split(Format(celda, "00-00-00"), "-")
celda = DateSerial(tmp(2), tmp(1), tmp(0))
celda.NumberFormat = "dd/mm/yy"
End If
Next celda
Salida:
Application.EnableEvents = True
End Sub

Saludos,
KL
Respuesta Responder a este mensaje
#5 Héctor Miguel
07/07/2005 - 11:28 | Informe spam
hola, KL !

... tal esto (si que esta limitado a XL2000 para arriba): [...]



[por lo que a mi respecta'?]... me gusta :D
[no importa que este 'limitado' a xl2000 o 'superior'] :))
solo 'evitaria' la parte de:
Set rng = Intersect(Target, Range("A1:A5"))
y la sustituiria por:
For Each celda In Intersect(Target, Range("a1:a5"))

:D
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida