Extraer un registro de Varios Contratos

Llevo el control de contratos del personal y lo registro en una hoja de excell cada contrato y deseo obtener en otra hoja un registro por contrato.

Lo que yo hago manualmente es lo siguiente:

Primero agrupo por nombre de trabajador, luego evalúo si es del mismo tipo de planilla, luego si es del mismo tipo de trabajador y finalmente si la fecha de contrato es continua, de ser así, se ría el resultado de un solo registro.

Estoy enviando a tu correo mayor explicación ([email protected] espero sea el mismo que me enviaste hace dos años) y un archivo con la estructura de como los registro y una hoja de salida.

1 Respuesta

Respuesta
2

Envíame tu archivo con los ejemplos explicados y del resultado que esperas.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “maximop

¡Gracias!

YA te envíe el archivo a tu correo.

Te anexo la macro

Sub Registro_Por_Contrato()
'
' Por Dante Amor
'
    '
    Application.ScreenUpdating = False
    Set h1 = Sheets("contratos")
    Set h2 = Sheets("resultado")
    h2.Rows("2:" & Rows.Count).Clear
    '
    Call Ordenar(h1)
    '
    ant1 = h1.Cells(2, "R") & "|" & h1.Cells(2, "D") & "|" & h1.Cells(2, "F")
    finicio = h1.Cells(2, "S")
    fcese = finicio - 1
    meses = 0
    j = 2
    For i = 2 To h1.Range("R" & Rows.Count).End(xlUp).Row + 1
        registra = False
        If ant1 = h1.Cells(i, "R") & "|" & h1.Cells(i, "D") & "|" & h1.Cells(i, "F") Then
            If h1.Cells(i, "S") - 1 = fcese Then
                meses = meses + h1.Cells(i, "X")
            Else
                registra = True
            End If
        Else
            registra = True
        End If
        If registra Then
            'registra contrato
            datos = Split(ant1, "|")
            h2.Range(h2.Cells(j, "A"), h2.Cells(j, "C")) = datos
            h2.Cells(j, "D") = finicio
            h2.Cells(j, "E") = fcese
            h2.Cells(j, "F") = meses
            finicio = h1.Cells(i, "S")
            meses = h1.Cells(i, "X")
            j = j + 1
        End If
        ant1 = h1.Cells(i, "R") & "|" & h1.Cells(i, "D") & "|" & h1.Cells(i, "F")
        fcese = h1.Cells(i, "V")
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub
'
Sub Ordenar(h1)
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u = h1.Range("R" & Rows.Count).End(xlUp).Row
    With h1.Sort
        '
        .SortFields.Clear
        'nombre
        .SortFields.Add Key:=h1.Range("R2:R" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'planilla
        .SortFields.Add Key:=h1.Range("D2:D" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'tipo
        .SortFields.Add Key:=h1.Range("F2:F" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'fec ini
        .SortFields.Add Key:=h1.Range("S2:S" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'fec cese
        .SortFields.Add Key:=h1.Range("V2:V" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        '
        .SetRange h1.Range("A1:BM" & u): .Header = xlYes: .MatchCase = False
        .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    End With
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Dante,

Gracias es increíble tu trabajo, gracias por existir personas como tu.

Acabo de probar y funciona, solo que me gustaría que en el resultado también salga los demás datos que están en la hoja de contratos como, DNII, fecha de nacimiento, Razón social_rep, Etc., de ser posible todos los datos de cada campo en el mismo orden.

Máximop.   

En el ejemplo no estaban esos datos. Con gusto te ayudo, crea una nueva pregunta y explica con detalle y ejemplos completos lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas