Excel cambio de formato

Tengo una hoja de excel con una columna con datos en formato texto de la siguiente forma
01h05m06s
05m25s
55m33s
01h35m26s
55s
22s
55m
Esto es un ejemplo, y quiero que los datos de esa columna aparezcan en tres columnas diferentes donde la primera seria h la segunda fuera m y la tercera fuera es y fueran números para poder calcularos. Agradecería mucho tu ayuda para poder solucionar este tema. Muchas gracias de antemano. Safua

1 respuesta

Respuesta
1
Puedes usar la siguiente MACRO
Sub Separador()
Dim nFila As Integer
Dim nTotalFilas As Integer
Dim sCelda As String
    Range("A1").Select 'Suponiendo que aquí inicie la lista
    Range(Selection, Selection.End(xlDown)).Select 'Seleccionamos toda la columna
    nTotalFilas = Selection.Cells.Count 'Obtenemos el total de filas
    For nFila = 1 To nTotalFilas 'Recorremos toda la columna
        sCelda = "A" & nFila
        'Buscamos si en la celda hay Horas y las asignamos a la columna B
        If InStr(1, UCase(Range(sCelda).Value), "H") > 0 Then _
            Range("B" & nFila).Value = Mid(Range(sCelda). Value, (InStr(1, UCase(Range(sCelda).Value), "H") - 2), 3)
        'Buscamos si en la celda hay Minutos y las asignamos a la columna C
        If InStr(1, UCase(Range(sCelda).Value), "M") > 0 Then _
            Range("C" & nFila).Value = Mid(Range(sCelda).Value, InStr(1, UCase(Range(sCelda).Value), "M") - 2, 3)
        'Buscamos si en la celda hay Segundos y las asignamos a la columna D
        If InStr(1, UCase(Range(sCelda).Value), "S") > 0 Then _
            Range("D" & nFila).Value = Mid(Range(sCelda).Value, InStr(1, UCase(Range(sCelda).Value), "S") - 2, 3)
    Next
End Sub
He probado la macro y funciona excelente, pero si hay alguien que ha introducido los valores de la siguiente forma
1h25m5s
Da un error por no tener un 0 en la hora y el 0 en el segundo
es decir 1h25m5s -> frente a 01h25m05s
se podría corregir esto para que introduzca un 0 donde falte...
Muy agradecida de todas formas la usare muy a menudo muchísimas gracias
A ver hice algunos cambios
Sub Separador()
Dim sCad1 As String
Dim sHoras As String
Dim sMins As String
Dim sSegs As String
Dim nFila As Integer
Dim nTotalFilas As Integer
Dim sCelda As String
Dim nPos As Integer
Dim nChar As Integer
    Range("A1").Select 'Suponiendo que aquí inicie la lista
    Range(Selection, Selection.End(xlDown)).Select 'Seleccionamos toda la columna
    nTotalFilas = Selection.Cells.Count 'Obtenemos el total de filas
    For nFila = 1 To nTotalFilas 'Recorremos toda la columna
        sCelda = "A" & nFila
        For nPos = 1 To Len(Range(sCelda).Value)
            If IsNumeric(Mid(Range(sCelda).Value, nPos, 1)) Then
                sCad1 = sCad1 & Mid(Range(sCelda).Value, nPos, 1)
            Else
                If UCase(Mid(Range(sCelda).Value, nPos, 1)) = "H" Then
                    If Len(sCad1) < 2 Then
                        sHoras = "0" & sCad1 & "h"
                    Else
                        sHoras = sCad1 & "h"
                    End If
                    sCad1 = ""
                ElseIf UCase(Mid(Range(sCelda).Value, nPos, 1)) = "M" Then
                    If Len(sCad1) < 2 Then
                        sMins = "0" & sCad1 & "m"
                    Else
                        sMins = sCad1 & "m"
                    End If
                    sCad1 = ""
                ElseIf UCase(Mid(Range(sCelda).Value, nPos, 1)) = "S" Then
                    If Len(sCad1) < 2 Then
                        sSegs = "0" & sCad1 & "m"
                    Else
                        sSegs = sCad1 & "m"
                    End If
                    sCad1 = ""
                End If
            End If
        Next nPos
        Range("B" & nFila).Value = sHoras
        Range("C" & nFila).Value = sMins
        Range("D" & nFila).Value = sSegs
        sHoras = ""
        sMins = ""
        sSegs = ""
    Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas