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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Antonio
12/09/2007 - 23:46 | Informe spam
Eso funcionó excelente, solo dime:

como funciona, o que relacion tiene, o cual es el fundamento de esta parte
CriteriaRange:=Range("h1:h2"), _
con esta:
=contar.si($b$2:b2,b2)=1

Si puedes contestarme, sería excelente, pues no me queda claro como es que
trabaja

Saludos


"Héctor Miguel" escribió en el mensaje
news:
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




Respuesta Responder a este mensaje
#3 Héctor Miguel
13/09/2007 - 03:24 | Informe spam
hola, Antonio !

como funciona, o que relacion tiene, o cual es el fundamento de esta parte
CriteriaRange:=Range("h1:h2"), _
con esta:
=contar.si($b$2:b2,b2)=1
... no me queda claro como es que trabaja



[p.e.] si extiendes/copias/arrastras/... la formula de H2 hasta *H_n* [n es la ultima fila con datos]
obtendrias como resultado *verdadero* SOLO en las filas donde aparece por primera vez el dato en la columna 'B'
a) esto seria de utilidad para los aotufiltros
b) en los filtros avanzados solo es necesaria la formula *de partida* [en H2 y en blanco su titulo en H1]

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida