VBA. Proceder con la macro, sólo si el valor de una celda no existe ya en un rango de celdas.

Me presento. Me llamo Jesús y soy ingeniero. Estoy atascado con una macro que en principio es más que sencilla.

Tengo 2 columnas de" x" filas. En la primera columna tengo nombres de tareas, en la segunda columna tengo tiempos. Ejemplo: Cargar 30s, movimiento 1m, descargar 1m.

Los nombres de estas tareas se pueden repetir, de modo que "movimiento" puede aparecer en varias filas, así como cargar y descargar también.

Quisiera que en una fila aparezcan los totales de cada tarea, de modo que:

cargar           movimiento         descargar

5m 30 s             10m                     5m

Sin que se repitan las columnas, es decir que cada tarea aparezca en una sola columna con su total correspondiente de tiempo debajo.

De momento el código que tengo es el siguiente:

Public Sub sort_times()

lastrow = ActiveSheet.UsedRange.Rows.Count
Dim Task As String
Dim Time As Integer

task_col = 7 '1ªcolumna de tareas
time_col = 7 '1ª columna de tiempos acumulados

'Empezar a escribir siempre en (2,4)

For i = 2 To lastrow
       Task = Cells(i, 4)
       Time_acum = Cells(i, 5)
        For j = i + 1 To lastrow
                     If ActiveSheet.Cells(i, 4) = ActiveSheet.Cells(j, 4) Then
                                   Time_acum = Time_acum + ActiveSheet.Cells(j, 5)
                                   Else
                     End If
        Next j

ActiveSheet.Cells(2, task_col).Value = Task
ActiveSheet.Cells(3, time_col).Value = Time_acum
task_col = task_col + 1
time_col = time_col + 1
Next i
End Sub

Cómo veis, la columna donde lee las tareas es "Task" que es = a Cells(i, 4), y el rango donde debe hacer la comprobación de Task no existe de antemano es entre Cells(2,7):Cells(2, task_col).

De alguna manera entiendo que he de hacer una comprobación previa de que Task, no existe entre Cells(2,7):Cells(2, task_col).

Este código me escribe las columnas pero claro el bucle i sigue y sigue y se me repiten las tareas...

He pensado en usar bucles While, CountIf, pero no doy con la tecla.

1 Respuesta

Respuesta
1

Quisiera disculparme. Llevaba atascado varios días y de repente he salido del atasco. Estaba cometiendo un error usando la función "CounIf", de modo que no me funcionaba, lo he corregido y por fin obtengo lo que buscaba.

Gracias de todas formas y aqui os dejo el código:

Public Sub sort_times()

lastrow = ActiveSheet.UsedRange.Rows.Count
Dim Task As String
Dim Time As Integer

task_col = 7 '1ªcolumna de tareas
time_col = 7 '1ª columna de tiempos acumulados

Dim var1 As Integer 'Variable que declara el resultado de CounIf

'Empezar a escribir siempre en (2,4)

For i = 2 To lastrow
            Task = Cells(i, 4)
            Time_acum = Cells(i, 5)
       'Cuenta el número de veces que aparece el valor de Task en el rango cells(2,7), cells(2, task_col)

var1 = Application.WorksheetFunction.CountIf(Range(ActiveSheet.Cells(2, 7),      ActiveSheet.Cells(2, task_col)), Task)

           If var1 = 0 Then

                   For j = i + 1 To lastrow
                            If ActiveSheet.Cells(i, 4) = ActiveSheet.Cells(j, 4) Then
                                 Time_acum = Time_acum + ActiveSheet.Cells(j, 5)
                            End If
                   Next j
          ActiveSheet.Cells(2, task_col).Value = Task
          ActiveSheet.Cells(3, time_col).Value = Time_acum
          task_col = task_col + 1
          time_col = time_col + 1
          End If

Next i
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas