filtro avanzado con distinct

12/09/2007 - 20:28 por Antonio | Informe spam
Hola grupo:

hice el siguiente codigo, para depurar una base de datos:

En las columnas a y b tengo el nombre y la direccion de correo electrónico,
y a veces el nombre esta escrito de diferente manera, por ejemplo
"pablo morales juarez" y "Pablo M. Juárez" y me produce duplicidades con
distinto nombre pero igual correo, entonces supuse que poniendo filtro
distinct solamente respecto de la columna "b" iba a dejar SOLO los registros
unicos respecto del e-mail...
pero bonita sorpresa, excell considera como registro único, todos los
campos..

¿Como puedo lograr que aunque tenga diferentes datos en las filas de A:G, me
deje unicamente aquellos registros que sean distintos en el dato de la
columna B???

Espero haberme explicado


-
Sub Distinct()
'
' Distinct Macro
' Macro grabada el 12/09/2007 por Antonio Galvan Saldaña
'

'
Range("$A:$G").Select
Columns("$A:$G").AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Columns("$B:$B"), CopyToRange:=Columns("$H:$N"), Unique:=True

End Sub

 

Leer las respuestas

#1 Héctor Miguel
12/09/2007 - 21:12 | Informe spam
hola, Antonio !

1) [hasta donde se]...
a) un *registro* se compone por todos sus campos
b) si existen *similitudes/igualdades/...* en algunos PERO NO en todos sus campos
cualquier *diferencia* los convierte en registros *unicos*

2) al usar un rango como criterios para los filtros avanzados
si consultas la ayuda en linea {F1} de excel, al respecto de los rangos para criterios *avanzados*
[ademas de varios ejemplos de su uso] veras que el comentario dice +/- lo siguiente:
"rango de criterios"
"rango de celdas que contiene un conjunto de condiciones de busqueda que se utilizan... para filtrar datos de una lista"
"... esta formado por una fila de rotulos de criterio y, como minimo, una fila que defina las condiciones de busqueda"

3) si necesitas criterios *unicos* para SOLO un campo de tu listado [o varios segun adaptes una formula]...
prueba con el siguiente procedimiento [asumiendo que la fila1 contiene los rotulos/titulos de tus campos/columnas]:
a) deja LIBRE la siguiente columna de tu base de datos [coumna H ?]
b) deja EN BLANCO la celda H1
c) usa la siguiente formula en la celda H2 -> =contar.si($b$2:b2,b2)=1
-> OJO con el separador de argumentos, mi sistema usa la coma ',' NO el punto y coma ';' :D
d) ejecuta una macro +/- como la siguiente:

Sub Filtrar_Unicos_colB()
Columns("a:g").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("h1:h2"), _
CopyToRange:=Columns("i:o"), _
Unique:=True
End Sub

4) es probable que la formula anterior no de el mismo resultado en la version 2007 -???-
[en este caso deberas definir los rangos de la formula como completos y en absoluto]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
hice el siguiente codigo, para depurar una base de datos:
En las columnas a y b tengo el nombre y la direccion de correo electronico
y a veces el nombre esta escrito de diferente manera, por ejemplo "pablo morales juarez" y "Pablo M. Juarez"
y me produce duplicidades con distinto nombre pero igual correo, entonces supuse que poniendo filtro distinct
solamente respecto de la columna "b" iba a dejar SOLO los registros unicos respecto del e-mail...
pero bonita sorpresa, excell considera como registro unico, todos los campos..
Como puedo lograr que aunque tenga diferentes datos en las filas de A:G
me deje unicamente aquellos registros que sean distintos en el dato de la columna B???

Espero haberme explicado

Sub Distinct()
Range("$A:$G").Select
Columns("$A:$G").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Columns("$B:$B"), CopyToRange:=Columns("$H:$N"), Unique:=True
End Sub

Preguntas similares