Tengo cinco hojas en un documento. La primera hoja tiene las filas que contienen valores en la primera columna. Necesito eliminar todas esas filas del resto de las hojas que tienen el mismo valor en la primera columna que coincide con el valor de la primera columna de la primera hoja. El problema es que se supone que deben eliminarse una gran cantidad de registros con diferentes valores de columna. ¿Cómo puedo buscar todas esas filas que contienen los valores de la primera hoja (o en común a la primera hoja) y eliminarlas?
Respuesta1
Revisar cada valor en la columna A de la Hoja 1 y usar ese valor para filtrar las 4 hojas de trabajo restantes debería brindarle los resultados que está buscando.
Sub remove_from_2_to_5()
Dim var As Variant, w As Long, rw As Long
With Sheets(1)
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(.Cells(rw, 1)) Then
var = .Cells(rw, 1).Value
For w = 2 To 5
With Sheets(w).Cells(1, 1).CurrentRegion
.AutoFilter
.AutoFilter field:=1, Criteria1:=var
With .Offset(1, 0).Resize(.Rows.Count, .Columns.Count)
If CBool(Application.Subtotal(103, .Columns(1))) Then
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With
.AutoFilter
End With
Next w
End If
Next rw
End With
End Sub
A medida que el primer bucle For/Siguiente desciende por la columna A de la Hoja1, registra el valor que encuentra. Esto se utiliza en cada una de las hojas de trabajo restantes como criterio en una .AutoFilter
operación. Si se muestran celdas después de aplicar el filtro, las filas se eliminan.
Respuesta2
Inserte una columna en cada hoja para verificar si el valor de la primera columna aparece en la primera hoja: =iferror(match(a2,sheet1!a:a,0)>0,false)
obtendrá true
las filas que tienen la primera columna en la primera hoja, las filtrará y las eliminará.
Si tiene varias hojas y necesita una solución aún más rápida, entonces necesita una macro.