Macro para sumar horas

Este es mi problema
Yo tengo una hoja de excel ("Sheet1") tal que así:
   A B C D
0001 0000007 003 10:34
0001 0000007 005 7:05 <- Estos datos son los que me interesaria
0001 0000007 005 5:12 <- sumar en este caso
0002 0000009 003 23:43
0002 0000007 004 4:44
0002 0000004 001 10:35
Y me he creado una macro para que en otra hoja("TiempoSem"), me sume los datos de la columna DE que en su fila, en la columna A tenga un "0001" y en la C un "005", me los deje en la celda "G6"
Private Sub Actualizar_Click()
Dim i As Long                                     'declaro la variable i
Application.ScreenUpdating = False   'con esta linea oculto lo que hace la macro 
Sheets("Sheet1").Select                    'selecciono la hoja de la que saco los datos
finrgo = ActiveSheet. Range("A65536").End(xlUp). Row 'miro cual es el ultimo elemento
' me meto en un bucle para recorrer todas las filas en busca de los elementos deseado
    For i = 1 To finrgo            
        If ((Sheets("Sheet1").Range("A" & i) = "0001") And (Sheets("Sheet1").Range("C" & i) = "005")) Then
     'en la variable "TOTAL" voy guardando la suma de los elementos que me interesan
            TOTAL =  TOTAL + Sheets("Sheet1").Range("D" & i) 
        End If
    Next i
 ' Vuelco la informacion de TOTAL a la celda que me intenresa
Sheets("TiempoSem").Range("G6") = TOTAL
Application.ScreenUpdating = True    'dejo de ocultar lo que hace la macro
End Sub
El problema ahora mismo son los tipos. Aunque defina la columna DE de Sheet1 como hh:mm o como [h]:mm:ss, al ir actualizando la suma de TOTAL, me lo concatena, así en este caso antes de volcar la información a la celda de la otra hoja, TOTAL = "7:055:12".
Y si cambio la linea
            TOTAL =  TOTAL + Sheets("Sheet1").Range("D" & i)  
por
            Range("G6") = Range("G6") + Sheets("Sheet1").Range("M" & i)
me da error de tipos cuando suma.
Si alguien me pudiese echar una mano.

1 respuesta

Respuesta
1
Tengo la sensación que el valor que tienes en la columna "D" es un texto y por eso no puede sumarlo.
Prueba a convertirlo a tipo "time" y seguramente funcionará.
Sustituye la línea...
    TOTAL =  TOTAL + Sheets("Sheet1").Range("D" & i) 
... por esta...
    TOTAL =  TOTAL + timevalue(Sheets("Sheet1").Range("D" & i))
GENIAL! Una solución excelente.
Pero antes de finalizar la pregunta, quería enterarme de una cosa. ES yo daba al formato de la columna origen de los datos antes de sumarlos, me aparecían con ese formato. ¿Por qué luego los interpretaba como texto la macro?
MUCHAS GRACIAS DE VERDAD, llevaba 3 días comiéndome el tarro con esto y ya estaba pensado en otras soluciones como pasarlo a minutos o cosas así.
Los datos de las tres primeras columnas, aunque puedan parecer números, creo que son textos (por el hecho de llevar ceros a la izquierda y por el código que has puesto).
Eso me ha hecho pensar que es una información importada de un fichero externo y que las celdas son de tipo texto.
Lo de las horas:minutos... si los anteriores son texto, parece lógico que esos también y viendo que el resultado de la operación "+" es una concatenación... está claro: es un texto.
El hecho de dar formato hora a una columna no significa que esta lo sea. Si tu pones en una celda el número '718 (con la comilla delante), ya puedes darle formato numérico con o sin decimales que no te hará ni caso porque es un texto.
En tu caso, el contenido es un texto y por mucho formato que le des no deja de serlo. Otra cosa sería si al cargar los datos lo convirtieses a formato hora:minutos y guardases el valor convertido.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas