Macro para eliminar filas con 3 condiciones

Del programa que usa la empresa se puede exportar un archivo en excel son 19 variables (es decir 19 columnas) pero varía la cantidad de filas, en un archivo me pueden salir 16.000 filas, o 11.000 o 1.000. Soy nuevo en macros... Y lo que sé hacer es grabar (he hecho un intento grabando la macro aplicando filtros pero no es lo que necesito)La macro la necesito para arreglar lo siguiente:

Eliminar todas las filas que cumplan las dos siguientes condiciones:

1) Seleccione En la columna D (variable "Cust target") todas las celdas cuyos valores sean 0 y las que estén vacías.

2) Ordenar la columna P por fecha de más reciente a más vieja, es decir que quede por ejemplo los registros de 2015 primero y los de 2011 de último.

El caso es que necesito que borre todos los 0 y las celdas vacías de la columna D excepto los de las 2 semanas más recientes (14 días exactos).

Les agradezco mucho la ayuda.

Esto es lo que intenté hacer aunque creo que es mejor no verlo.

Sub Macro1()
'
' Macro1 Macro
' filtro
'
' Keyboard Shortcut: Ctrl+Shift+T
'
Selection.AutoFilter
ActiveSheet.Range("$A$1:$Y$15912").AutoFilter Field:=4, Criteria1:="=0.00" _
, Operator:=xlOr, Criteria2:="="
ActiveWorkbook.Worksheets("Search to Results Compare").AutoFilter.Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Search to Results Compare").AutoFilter.Sort. _
SortFields.Add Key:=Range("P1:P15912"), SortOn:=xlSortOnValues, Order:= _
xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Search to Results Compare").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Rows("2195:2218").Select
Range("D2195").Activate
Selection.Delete Shift:=xlUp
End Sub

1 Respuesta

Respuesta
1

Te recomiendo una macro con filtro avanczado como en el siguietne ejemplo:

Una base de datos simplificada cuyo rango he llamado "Datos"

Rango A1:C3 nombrado "Criterios" que debes escribir exactamente como se visualiza en el recuadro amarillo.

Y aplicar la siguiente macro:

Sub Filtrar()
Worksheets("Hoja2").Cells.Clear
[A5].CurrentRegion.Name = "Datos"
[Datos].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[Criterios], CopyToRange:=[Ubicacion], Unique:=False
End Sub

Al ejecutar te va a filtrar y pegar en la Hoja2 la lista con los criterios que estás pidiendo de esta forma.

La instrucción [A5].CurrentRegion.Name = "Datos" hace que si pegas tu base de datos original en A5 la macro detectará y asignará el nombre automáticamente al rango de datos.

Es importante que el criterio =LARGO(A6)>0 no lleve rótulo encima y asigne la referencia de la primera celda A6 con datos del campo CUST TARGET. Los otros dos criterios sí deben llevar el nobre exacto del campo encima. Cumpliendo esto luego el número de campos que tenga la base de datos es indiferente.

Por cierto, me olvidé de que además debes nombrar la celda A1 de la Hoja2 como nombre de rango "Ubicacion" para que funcione.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas