En una consulta que observe recientemente encontré un desafío interesante, se requiere que analizando una columna de datos, se llegue a completar las celdas en blanco con el primer dato que se encuentra dentro del bloque previo.
Es decir en el ejemplo de la siguiente imagen la celda C9 (que se encuentra en blanco) debe tener el dato de C3, C13 el dato de C10 y así sucesivamente.
Para poder resolver este ejercicio, con el código mostrado a continuación necesitamos los siguientes conceptos:
última fila con datos en VBA, para identificar cual es la última fila de la columna 3 que tiene datos.
Combinamos contar blanco con Resize en Excelpara identificar cuantos bloques de encuentran involucrados:
WorksheetFunction.CountBlank(Cells(3, 3).Resize(ult - 1, 1))
El For en Excel para ejecutar la tarea repetitiva
Offset en VBA para escribir el resultado y pasar al siguiente bloque
Sub llenar()
ult = Cells(Rows.Count, 3).End(xlUp).Row
repetir = WorksheetFunction.CountBlank(Cells(3, 3).Resize(ult - 1, 1))
' c3 es la celda donde empiezan los datos
Range("C3").Select
For x = 1 To repetir
dato = ActiveCell.Value
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Value = dato
ActiveCell.Offset(2, 0).Select
Next
End Sub
Dato: es la variable que sirve para almacenar el valor que se completará en la celda en blanco siguiente.
En el siguiente archivo se encuentra el código completo para "completar celdas en blanco con el primer dato": Completar celdas en blanco con primer dato