Jump to content

[Solucionado] Macro cambiar formato hora


Recommended Posts

Hola,

Necesito tener una forma de escribir 4 dígitos en varias celdas, sin ningún tipo de separador entre hh y mm y en cada una de ellas, esos 4 dígitos se transformen en hh:mm, cuando presiono enter.

Para ser más explícito: escribo 1435 y al presionar enter, esa cifra se transforma en 14:35.

No puedo aplicar una fórmula, porque lo primero que ocurriria era que esta se borraría de inmediato.

Supongo que tendría que ser hecho con una macro o en programación VBA, aplicable a determinadas celdas.

Tengo Excel 2010.

Alguien me echa una mano :-) ?

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola fatbird

Prueba con una macro de evento sita en la hoja que te interese, tal que

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
If Target = "" Then Exit Sub
If Len(Target) < 3 Or Len(Target) > 4 Then Exit Sub
If Len(Target) = 3 Then Target = CDate(Format(Target, "0:00"))
If Len(Target) = 4 Then Target = CDate(Format(Target, "00:00"))
End Sub[/CODE]

En este ejemplo los datos de hora se introducirían en la columna A

Un saludo desde Vitoria

Link to post
Share on other sites
  • 2 weeks later...

Re: Macro cambiar formato hora

Hola AOSA.

Perdona que haya tardado tanto en contestar, pero estuve fuera bastante tiempo...

Te agradezco tu ayuda, pero no me funciona totalmente bien para lo que necesito.

Si escribo 1234, va perfecto. Aparece 12:34.

Si escribo 3, aparece :3 y lo que necesito es que me aparezca 00:03 o 0:03.

Un saludo

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola fatbird

Prueba con una macro de evento sita en la hoja que te interese, tal que

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub
If Target = "" Then Exit Sub
If Len(Target) < 3 Or Len(Target) > 4 Then Exit Sub
If Len(Target) = 3 Then Target = CDate(Format(Target, "0:00"))
If Len(Target) = 4 Then Target = CDate(Format(Target, "00:00"))
End Sub[/CODE]

En este ejemplo los datos de hora se introducirían en la columna A

Un saludo desde Vitoria

Hola Ioyama,

Seguramente es por mi inaptitud :-) pero no me funciona.

Estoy recién empezando con el tema de las macros y habré hecho algo mal...

Un saludo

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola:

Prueba con esto:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xTarget As Variant
If Target.Cells.Count > 1 Or Target.Column <> 1 Or Target = "" Or Len(Target) > 4 Then Exit Sub
xTarget = CStr(Target)
Do While Len(xTarget) < 4: xTarget = "0" & xTarget: Loop
Target = Left(xTarget, 2) & ":" & Right(xTarget, 2)
End Sub
[/CODE]

Recuerda que este código debe ir en la hoja no en un módulo.

Esta preparado solo para la columna 1.

Las celdas de la columna 1 deben tener formato texto.

Saludos.

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola:

Prueba con esto:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xTarget As Variant
If Target.Cells.Count > 1 Or Target.Column <> 1 Or Target = "" Or Len(Target) > 4 Then Exit Sub
xTarget = CStr(Target)
Do While Len(xTarget) < 4: xTarget = "0" & xTarget: Loop
Target = Left(xTarget, 2) & ":" & Right(xTarget, 2)
End Sub
[/CODE]

Recuerda que este código debe ir en la hoja no en un módulo.

Esta preparado solo para la columna 1.

Las celdas de la columna 1 deben tener formato texto.

Saludos.

Esta me funciona muy bien.

En cuanto a formato, si lo pongo en texto, me aparecen horas decimales.

Si lo pongo en formato [hh]:mm va perfecto. Incluso si escribo 670, por dar un ejemplo, el sistena [i]sabe[/i] que los minutos tienen que estar entre 0 y 59, y [i]considera[/i] que 70 es 01:10. El resultado que presenta es 7:10 (no 6:70).

En este formato me suma las horas perfectamente.

Solamente me permite cuatro cifras. Clarifico: 2315 aparece como 23:15 y 12345 no aparece como 123:45 sino como 296280:00.

¿Se puede hacer para más de cuatro cifras?

¿Se puede definir las celdas donde quiero que se aplique, en vez de ser solamente una columna?

¡Muchísimas gracias!

Link to post
Share on other sites

Re: Macro cambiar formato hora

Igual y como dijo AOSA, pero el formato en vez de ##":"## lo cambias a 00":"00

Muchas gracias.

Realmente funciona, pero es una solución solamente de apariencia.

El aspecto es perfecto, pero no se comporta como horas.

Clarifico: Si sumamos varias celdas con esos tiempos, aparecen resultados de este tipo: 03:55 + 01:30 = 04:85

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola:

Te adjunto un archivo con lo que creo que es lo que pides.

En la columna 1 puedes informar horas y minutos sin límite de longitud, siempre y cuando las dos ultimas correspondan a minutos y el resto a horas.

Las celdas de la columna 1, deben tener formato texto OBLIGATORIAMENTE .

Para obtener la suma, selecciona las celdas que quieras sumar, click derecho y pulsa sobre "Sumar como horas", y te aparecerá la suma en la celda de la derecha de la última celda seleccionada.

Ya contarás.

Saludos.

SumarHoras.zip

Link to post
Share on other sites

Re: Macro cambiar formato hora

Está perfecto, pero no me resuelve el problema, porque necesito aplicar la función "SUMA" en algunos casos, en otros sumar celdas dispersas y quiero todo automatizado, con lo cual no se hace práctico sumar de la forma que me indicas.

Te agradezco muchísimo tu ayuda y todo el tiempo que dedicaste a mi asunto.

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola:

En tu primer post, pusiste:

Necesito tener una forma de escribir 4 dígitos en varias celdas, sin ningún tipo de separador entre hh y mm y en cada una de ellas, esos 4 dígitos se transformen en hh:mm, cuando presiono enter.

La próxima vez, pon todos los requerimientos de una vez y así no perderemos el tiempo.

Saludos

Link to post
Share on other sites

Re: Macro cambiar formato hora

Macro Antonio ¡no desesperes!, para que estamos los amigos sino para ayudar.

"Pájaro gordo", digo fatbird, prueba con ésto:

Private unCambio As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strTarget As String

If Target.NumberFormat = "[hh]:mm" Then
If unCambio Then Exit Sub
unCambio = True
strTarget = Format(Target, "000000")
Target = Left$(strTarget, Len(strTarget) - 2) / 24 + Right$(strTarget, 2) / 1440
unCambio = False
End If
End Sub[/CODE]

Como puedes ver en el código, las celdas que tengan formato [b][hh]:mm[/b] cambiarán su valor y se podrán sumar individualmente pues son horas de Excel.

En las celdas dónde sumes le pones un formato de fecha distinto, por ejemplo [b][h]:mm[/b] para que no ejecute la macro y no te borre la fórmula con la suma.

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola Macro Antonio, prueba el adjunto con la macro cambiada para poder escribir fórmulas de SUMA en las celdas con formato [hh]:mm hasta el valor máximo que admite Excel: 71003183:59

Con 71 millones de horas le valdrá a fatbird ¿o no?

Option Explicit

Private unCambio As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strTarget As String

If Target.NumberFormat = "[hh]:mm" And Not (Target.HasFormula) Then
If unCambio Then Exit Sub
unCambio = True
On Error Resume Next
Err.Clear
strTarget = Format(Target, "000000")
If Err.Number = 0 Then
Target = Left$(strTarget, Len(strTarget) - 2) / 24 + Right$(strTarget, 2) / 1440
End If
unCambio = False
End If
End Sub[/CODE]

EnterHoras.zip

Link to post
Share on other sites

Re: Macro cambiar formato hora

Hola Macro Antonio, prueba el adjunto con la macro cambiada para poder escribir fórmulas de SUMA en las celdas con formato [hh]:mm hasta el valor máximo que admite Excel: 71003183:59

Con 71 millones de horas le valdrá a fatbird ¿o no?

Option Explicit

Private unCambio As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strTarget As String

If Target.NumberFormat = "[hh]:mm" And Not (Target.HasFormula) Then
If unCambio Then Exit Sub
unCambio = True
On Error Resume Next
Err.Clear
strTarget = Format(Target, "000000")
If Err.Number = 0 Then
Target = Left$(strTarget, Len(strTarget) - 2) / 24 + Right$(strTarget, 2) / 1440
End If
unCambio = False
End If
End Sub[/CODE]

Estimado Pegones1,

Lo de "pájaro gordo" me gusta. Pájaro porque vuelo y gordo porque lo soy.

[b]¡Tu solución es perfecta! Funciona a 100%.[/b]

Muchísimas gracias.

Un saludo

Link to post
Share on other sites

Re: Macro cambiar formato hora

fatbird me alegra que esté solucionado, pero antes de cerrarlo quería compartir otra solución sin la ayuda de la variable auxiliar unCambio y con la posibilidad de introducir las horas como un número (ej: 12345) o de la forma tradicional con dos puntos (ej: 123:45) en las celdas con formato [hh]:mm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strTarget As String
Dim pos2puntos As Long

If Target.NumberFormat = "[hh]:mm" And Not (Target.HasFormula) Then
On Error Resume Next
Err.Clear
pos2puntos = InStr(1, Target, ":")
If pos2puntos > 0 Then
strTarget = Replace(Target, ":", "")
If Len(Target) - pos2puntos <> 2 Then
MsgBox "Error al introducir las horas", vbCritical, "Enter Horas"
Exit Sub
End If
Else
If Target - Int(Target) < 1 And Target - Int(Target) > 0 Then Exit Sub
strTarget = Format(Target, "000000")
End If
If Err.Number <> 0 Then
MsgBox Err.Description, vbCritical, "Enter Horas"
Exit Sub
End If
If strTarget + 0 > 7100318359# Then
MsgBox "Demasiadas horas", vbCritical, "Enter Horas"
Exit Sub
End If
Target = Left$(strTarget, Len(strTarget) - 2) / 24 + Right$(strTarget, 2) / 1440
End If
End Sub[/CODE]

Hay que avisar que cuando se introducen de la forma tradicional más de 9999:59 horas se da el caso del formato en que pos2puntos es mayor de cero.

Adjunto ejemplo en la hoja [b]EnterHoras2[/b]

EnterHoras.zip

Link to post
Share on other sites
Guest
This topic is now closed to further replies.
  • Crear macros Excel

  • Posts

  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy