Macro para insertar fila con condicional fecha.

Solicito de su asesoría para crear una macro que inserte una fila abaja de cada registro de acuerdo a la fecha inicial y final de cada novedad. Las fechas de la novedades están en la siguientes columnas de la S hasta la columna AD. La fecha inicial y final nos sirve para determinar los números de días que estuvo en esta novedad y para obtener los días para cuando inserte las filas.

Las novedades están resaltadas por colores . Cada usuario puede tener distintas novedades osea que por cada novedad se debe crear o inserta un registro consecutivo. En el primer caso FILA 3 solo tiene FECHAS en la novedad de IGE de color verde por lo que en este caso solo se inserta una fila. Y según las fechas registras seria un día.

Acá complemento el resto de columnas igual voy adjuntar el archivo completo con un ejemplo don voy hacer el proceso manual con el primer caso. Que es lo dispendioso de este caso manual.

EJEMPLO aguirre cesar cuando se ejecute se inserta la linea 4. Y hace hace una operación en este caso resta los días iniciales que eran 30 - 1 uno es el día que obtuve en la fecha inicial y final, en conclusión que una linea con 29 días y la otra con 1, hablando de las columnas J a las M.

Igual adjunto archivo completo CON el ejemplo de los tres primero usuarios con sus filas insertadas.

https://docs.google.com/spreadsheets/d/1CvWMai1aGkwALYYWcbW9U185xPymJOtX/edit?usp=share_link&ouid=101955649926788157348&rtpof=true&sd=true 

1 respuesta

Respuesta
2

Respondo sobre este modelo que según me comentas es el real.

Así quedaría la macro. Los resultados en la siguiente imagen:

Sub insertaFechas()
'x Elsamatilde
'se evalúa si se llama a la macro desde las celdas de Fecha inicio-final
filx = ActiveCell.Row: colx = ActiveCell.Column
If Left(Cells(2, colx), 11) = "Fecha inici" Then
    coly = colx + 1
ElseIf Left(Cells(2, colx), 11) = "Fecha final" Then
    coly = colx: colx = coly - 1
Else
    MsgBox "Debes seleccionar alguna celda de las columnas de 'Fechas'"
    Exit Sub
End If
'se inserta la fila y se bajan las fechas
Range("A" & filx + 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'copia los datos fijos
Range("A" & filx & ":B" & filx).Copy Destination:=Range("A" & filx + 1)
Range("I" & filx & ":R" & filx).Copy Destination:=Range("I" & filx + 1)
Range(Cells(filx, colx), Cells(filx, coly)).Cut Destination:=Cells(filx + 1, colx)
'se busca la col en el título entre C:I
For i = Len(Cells(2, colx)) To 1 Step -1
    If Mid(Cells(2, colx), i, 1) = " " Then espa = i: Exit For  'busca el espacio previo a las siglas
Next i
If espa > 0 Then
    dato = Mid(Cells(2, colx), i + 1, Len(Cells(2, colx)) - i)
    For i = 3 To 9
        If Cells(2, i) = dato Then
            Cells(filx + 1, i) = "X"
            Cells(2, i).Copy
            Cells(filx + 1, i).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Exit For
        End If
    Next i
End If
End Sub

Fijate que para obtener el último caso, CADENA, le agregué al título el texto inicio - final para que coincida con el formato que tienen el resto de las col. Las  celdas con X se colorean del mismo color que las celdas de sus fechas.

Te estoy devolviendo el libro con la macro. Y una consulta para continuar con las otras columnas, ahora ocultas.

Sdos y no olvides marcar una valoración para darla por cerrada y yo continúo en la otra que dejaste en el tablón.

¡Gracias! 

yo continúo en la otra que dejaste en el tablón. Correcto.

Muchas Gracias su amable gestión. Bendecido día.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas