Macro que compare Datos en 2 hojas y elimine fila del criterio buscado

Me gustaría que me pudieras ayudar con la siguiente macro.
Tengo una hoja llamada "Hoja1" y otra hoja llamada "Hoja2"
En la hoja1 en la columna A tengo nombres de Clientes y en la columna B tengo sus números de Celular.

En la hoja2 en la columna A también tengo Clientes y en la columna B también tengo números de celular.
Deseo que una Macro me elimine la fila de la hoja1 los datos que ya están contenidos en la hoja2.

Ejemplo:
Supongamos que en la hoja2 en la columna A esta el nombre de PEPITO PEREZ y en la columna B de ese cliente el numero es 3747429474 lo que deseo es que busque el numero 3747429474 en la hoja1 columna B y si lo llega a encontrar, elimine toda la fila en donde se encuentra dicho numero, tener en cuenta que puede estar repetido en varias filas de la hoja1 entonces hay que buscarlo por toda la columna hasta el fin de los datos y eliminar todas las filas necesarias.

1 Respuesta

Respuesta
2

Si los números de celular los tienes como valores numéricos en las celdas, entonces utiliza la siguiente macro. También funciona con valores tipo texto. Pero con los valores numéricos debo convertirlos a tipo texto, para eso utilizo la columna Z, si la columna Z no la tienes disponible cambia en la macro las Z por la columna que tengas disponible en ambas hojas.

Si los números de celular los tienes como texto, entonces la macro sería más simple, me avisas.

Sub Eliminar_Filas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim arr() As Variant, lr1 As Long, lr2 As Long
  Set sh1 = Sheets("Hoja1")
  Set sh2 = Sheets("Hoja2")
  sh1.AutoFilterMode = False
  lr1 = sh1.Range("B" & Rows.Count).End(3).Row
  lr2 = sh2.Range("B" & Rows.Count).End(3).Row
  With sh1.Range("Z2:Z" & lr1)
    .Formula = "=""'""&B2"
    .Value = .Value
  End With
  With sh2.Range("Z2:Z" & lr2)
    .Formula = "=""'""&B2"
    .Value = .Value
  End With
  arr = sh2.Range("Z2:Z" & lr2).Value2
  sh1.Range("Z1:Z" & lr1).AutoFilter 1, Application.Transpose(arr), xlFilterValues
  lr1 = sh1.Range("B" & Rows.Count).End(3).Row
  If lr1 > 1 Then sh1.AutoFilter.Range.Offset(1).EntireRow.Delete
  sh1.AutoFilterMode = False
  sh1.Range("Z:Z").ClearContents
  sh2.Range("Z:Z").ClearContents
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas