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
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 de Enrique Bernal
1