Macro excel eliminar repetidos filtrando por años

Hola,
Soy nuevo en esto de las macros y llevo unos días peleándome con un excel y no consigo el resultado que realmente quiero.
A ver si me explico bien.
Tengo una tabla con distintos números correspondientes a facturas en una columna. Estos tienen distintos años de proyecto y distintas anualidades. Cada factura puede tener varios trámites de entrada para un mismo año, y yo sólo quiero quedarme con la fila del último trámite de cada año. Me explico con un ejemplo:
NºFila Número de factura Añodeproyecto Fecha trámite Anualidad
    1                      1                        2007               1/4/2008       2008
    2                      2                        2008               3/2/2009       2009
    3                      2                        2008               4/1/2009       2009
    4                      3                        2007               7/11/2009     2009
    5                      3                        2007               6/6/2009       2008
    6                      4                        2009               20/3/2010     2009
    7                      4                        2009               5/8/2010       2009 
    8                      4                        2009               3/9/2009       2010
    9                      5                        2008               19/3/2008     2009
En este caso habría que eliminar la fila 3 (ya que coincide el número de factura y la anualidad con la fila 2 y es de fecha más antigua). También la fila 6 por el mismo motivo. El resto deber quedar intactas porque no cumplen esos requisitos.
Yo ya he conseguido que me elimine los repetidos de la columna de número de factura pero tengo problemas con los criterios. Intento poner un filtro para para anualidad y no me sale. También intento poner en la condición de repetidos las dos columnas y no puedo tampoco. Y si los ordeno por fecha ascendente y aplico lo de eliminar repetidos me cargo los de anualidades diferentes.
Espero haberme explicado con claridad.
Os dejo mi código que elimina repetidos y si me podéis ayudar os lo agradeceré eternamente porque es muy importante para mi trabajo. También os adjunto un excel con una ejemplo completo de las hojas con las que trabajo:
Sub eliminarrepetidos
Dim iListCount As Integer
Dim iCtr As Integer
' Turn off screen updating to speed up macro.
Application.ScreenUpdating = False
' Get count of records to search through.
iListCount = Range("A5").Rows.Count
Range("A5").Select
' Loop until end of records.
Do Until ActiveCell = ""
' Loop through records.
For iCtr = 1 To iListCount
' Don't compare against yourself.
' To specify a different column, change 1 to the column number.
If ActiveCell.Row <> Cells(iCtr, 1).Row Then
' Do comparison of next record.
If ActiveCell.Value = Cells(iCtr, 1).Value Then
' If match is true then delete row.
Cells(iCtr, 1).EntireRow.Delete xlShiftUp
' Increment counter to account for deleted row.
iCtr = iCtr + 1
End If
End If
Next iCtr
' Go to next record.
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Eliminados repetidos!"
End Sub
Muchísimas gracias de verdad

1 respuesta

Respuesta
1
Creo que has llevado por otro lado la macro y por eso no te ha salido, te paso una macro que te puede ayudar, lo que hago es primero ordenar en forma descendente por fecha de tramite y luego saco un filtro avanzado de las facturas para sacar el la info sin que se repitan. Por ultimo coloco la primera info que se me genere de cada factura y la pego a lado de cada factura.
En fin se revisas la macro veras todo lo que hace, si quieres la puedes pausar para que la comprendas mejor
Sub Ordena()
'
' Macro2 Macro
'
'
    Columns("B:E").Select
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("B2:B65000"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("D2:D65000"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Hoja1").Sort
        .SetRange Range("B1:E65000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("B:B").Select
    Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("G1" _
        ), Unique:=True
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],C[-6]:C[-3],2,0)"
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],C[-7]:C[-4],3,0)"
    Range("J2").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],C[-8]:C[-5],4,0)"
    k = Range("G" & Cells.Rows.Count).End(xlUp).Row
    Selection.Copy
    Range("H3:J" & k).Select
    ActiveSheet.Paste
    Range("C1:E1").Select
    Selection.Copy
    Range("H1").Select
    ActiveSheet.Paste
    Columns("I:I").Select
    Application.CutCopyMode = False
    Selection.NumberFormat = "m/d/yyyy"
    Columns("B:F").Select
    Range("F1").Activate
    Columns("G:J").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("B:F").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
End Sub
No olvides finalizar la pregunta
Si te sirvió finaliza la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas