¿Cómo insertar filas en blanco cuando dentro de la data hay fechas faltantes? Cómo insertar la fecha en la celda correspondiente

Tengo aproximadamente 9 mil observaciones diarias de una variable X. El problema es que la data solo se reporta de lunes a jueves y hace falta completar la data para los días restantes. Para ello debo insertar tres filas en blanco (para viernes, sábado y domingo) y agregar la fecha. Yo después me encargo de interpolar la data que falta para completar la base de datos. Hacerlo manualmente llevaría mucho tiempo y sería muy tedioso. Imagino que con una Macro o algún comando que desconozco sería mucho más fácil hacerlo.

Las primeras observaciones de la data se verían, iniciando en las celdas A1 así:

Dia Fecha R

Lunes 5/1/1990 18,0

Martes 6/1/1990 18,25

Miércoles 7/1/1990 17,75

Jueves 8/1/1990 17,75

Lunes 12/1/1990 17,5

Martes 13/1/1990 18,25

Miércoles 14/1/1990 16,75

Jueves 15/1/1990 17,5

Lunes 19/1/1990 18,5

Martes 10/1/1990 18,5

Miércoles 21/1/1990 17,25

Jueves 22/1/1990 16,75

Lunes 26/1/1990 18,0

Martes 27/1/1990 18,5

Miércoles 28/1/1990 18,75

Jueves 29/1/1990 17,5

Lunes 2/2/1990 16,5

Martes 3/2/1990 18,25

Miércoles 4/2/1990 17,75

Jueves 5/2/1990 17,25

Lunes 9/2/1990 182,5

Martes 10/2/1990 18,5

1 Respuesta

Respuesta
1

Un proceso para insertar filas, utilizando la función de excel para insertar filas, con 9,000 registros sería muy lento.

Te recomiendo pasar todos los datos a memoria, insertar las filas en memoria y descargar la memoria en otras columnas.

Solamente tienes 3 columnas en la hoja: Día, Fecha y R (columnas A, ¿B y C)?

Si solamente tienes 3 columnas, prueba la siguiente macro:

El resultado quedará en las columnas E, F y G.

Sub InsertarFilas()
  'DECLRACIÓN DE VARIALBES
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, lr As Long, n As Long
  Dim fec As Variant
  '
  'ENTRADA
  lr = Range("A" & Rows.Count).End(3).Row
  a = Range("A1:C" & lr).Value2
  n = Range("B" & lr).Value - Range("B1").Value
  ReDim b(1 To n + 2, 1 To 3)
  '
  fec = a(1, 2)
  b(1, 1) = a(1, 1)
  b(1, 2) = a(1, 2)
  b(1, 3) = a(1, 3)
  i = 2
  j = 2
  '
  'PROCESO
  DoEvents
  Do While i < UBound(b, 1)
    If a(j, 2) - fec = 1 Then
      fec = a(j, 2)
      b(i, 1) = a(j, 1)
      b(i, 2) = a(j, 2)
      b(i, 3) = a(j, 3)
      j = j + 1
    Else
      fec = fec + 1
      b(i, 1) = Format(fec, "dddd")
      b(i, 2) = fec
    End If
    i = i + 1
  Loop
  '
  'SALIDA
  Range("E1").Resize(UBound(b), 3).Value = b
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas