Eliminar filas con elementos duplicados

01/09/2008 - 19:15 por Ricardo | Informe spam
Hola tengo el siguiente problema, tengo un libro de excel con elementos
repetidos, encontre dos codigos pero se me hace que solo funciona con pocas
lineas.

Ya que nada mas eliminan algunas.

Espero me puedan ayudar, les dejo los codigos, gracias

' Desactivar la actualización de pantalla para acelerar la macro.
Application.ScreenUpdating = False

' Obtener un recuento de los registros en los que buscar.
iListCount = Sheets("Indicadores Internas").Range("C6:C1000").Rows.Count
Sheets("Indicadores Internas").Range("A6:AH1000").Select ' Recorrer en bucle
hasta el final de los registros.
Do Until ActiveCell = "" ' Recorrer en bucle los registros.
For iCtr = 1 To iListCount ' No comparar contra sí mismo. ' Para especificar
una columna diferente, cambie el valor 1 en el número de columna.
If ActiveCell.Row <> Sheets("Indicadores Internas").Cells(iCtr, 1).Row Then
' Comparar el registro siguiente.
If ActiveCell.Value = Sheets("Indicadores Internas").Cells(iCtr, 1).Value
Then ' Si la coincidencia es verdad, eliminar la fila.
Sheets("Indicadores Internas").Cells(iCtr, 1).Delete xlShiftUp ' Contador de
incrementos para contar la fila eliminada.
iCtr = iCtr + 1
End If
End If
Next iCtr ' Ir al registro siguiente.
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Listo!"
End Sub

______________________________________________________________

Sub borrar_menos1()
Dim a() As String, rng As Range, str As String, i As Long, r As Range
Set rng = Range("C6", Range("C65536").End(xlUp))
start:
For Each r In rng
If Application.CountIf(Range("C6:C" & r.Row), r) > 1 Then
i = i + 1
ReDim Preserve a(1 To i)
a(i) = r.Address(0, 0)
If i = 50 Then
str = Join(C, ",")
Range(str).EntireRow.Delete
i = 0
Erase C
GoTo start
End If
End If
Next
str = Join(C, ",")
If str <> "" Then
Range(str).EntireRow.Delete
End If
Erase C
End Sub
_____________________________________________________

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/09/2008 - 22:32 | Informe spam
hola, Ricardo !

... tengo un libro de excel con elementos repetidos
encontre dos codigos pero se me hace que solo funciona con pocas lineas.
Ya que nada mas eliminan algunas.
Espero me puedan ayudar, les dejo los codigos (...)



de los codigos que expones, me parece que el primero "viene" de esta pagina:
-> macro publicada en http://support.microsoft.com/kb/240077/es

pero... tienen un error al considerar necesario un aumento en la cuenta de filas eliminadas
la forma de algoritmo que utilizan (en realidad) requiere de un decremento para la siguiente fila (luego de eliminar la anterior)
-> si quieres continuar con los ejemplos citados ahi... solo cambia de sumar... a restar la unidad para "la siguiente fila"...
en la linea siguiente al comentario que dice: " Increment counter to account for deleted row. " -> cambialo:
de: -> iCtr = iCtr + 1
a: -> iCtr = iCtr - 1

nota: si haces una busqueda por consultas anteriores en el foro... descubriras una amplia gama de algoritmos similares
(algunos seran mas rapidos que otros... dependiendo de otras necesidades, y conociendo mas detalles de tu realidad)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 mis_pistolas
02/09/2008 - 16:45 | Informe spam
On 1 sep, 15:32, "Héctor Miguel"
wrote:
hola, Ricardo !

> ... tengo un libro de excel con elementos repetidos
> encontre dos codigos pero se me hace que solo funciona con pocas lineas.
> Ya que nada mas eliminan algunas.
> Espero me puedan ayudar, les dejo los codigos (...)

de los codigos que expones, me parece que el primero "viene" de esta pagina:
-> macro publicada enhttp://support.microsoft.com/kb/240077/es

pero... tienen un error al considerar necesario un aumento en la cuenta de filas eliminadas
la forma de algoritmo que utilizan (en realidad) requiere de un decremento para la siguiente fila (luego de eliminar la anterior)
-> si quieres continuar con los ejemplos citados ahi... solo cambia de sumar... a restar la unidad para "la siguiente fila"...
    en la linea siguiente al comentario que dice: "  Increment counter to account for deleted row. "        -> cambialo:
    de: -> iCtr = iCtr + 1
      a: -> iCtr = iCtr - 1

nota: si haces una busqueda por consultas anteriores en el foro... descubriras una amplia gama de algoritmos similares
(algunos seran mas rapidos que otros... dependiendo de otras necesidades, y conociendo mas detalles de tu realidad)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Que tal Hector, muchas gracis por tu respuesta, del codigo ya funciona
bien, pero has de cuenta que tengo varios datos desde la columna A
hasta AH, ahora para eliminar los elementos duplicados me quiero guiar
por la columna C (que de esa columna vea cuales son los que se repiten
y que solo deje un solo valor, ya que me toma de la columna A y si lo
hace pero no como lo que yo quiero)

ME deberia de dejar en total cerca de 10 valores y me deja 5 que son
los datos que se repiten en la columna A y yo los que necesito son de
la columna C, como le puedo hacer.

Muchas gracias y disculpa las moletias
Respuesta Responder a este mensaje
#3 mis_pistolas
02/09/2008 - 16:54 | Informe spam
On 1 sep, 15:32, "Héctor Miguel"
wrote:
hola, Ricardo !

> ... tengo un libro de excel con elementos repetidos
> encontre dos codigos pero se me hace que solo funciona con pocas lineas.
> Ya que nada mas eliminan algunas.
> Espero me puedan ayudar, les dejo los codigos (...)

de los codigos que expones, me parece que el primero "viene" de esta pagina:
-> macro publicada enhttp://support.microsoft.com/kb/240077/es

pero... tienen un error al considerar necesario un aumento en la cuenta de filas eliminadas
la forma de algoritmo que utilizan (en realidad) requiere de un decremento para la siguiente fila (luego de eliminar la anterior)
-> si quieres continuar con los ejemplos citados ahi... solo cambia de sumar... a restar la unidad para "la siguiente fila"...
    en la linea siguiente al comentario que dice: "  Increment counter to account for deleted row. "        -> cambialo:
    de: -> iCtr = iCtr + 1
      a: -> iCtr = iCtr - 1

nota: si haces una busqueda por consultas anteriores en el foro... descubriras una amplia gama de algoritmos similares
(algunos seran mas rapidos que otros... dependiendo de otras necesidades, y conociendo mas detalles de tu realidad)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Hola Hector, se me paso ponerte un ejemplo de como tengo mi tabla

Auditor Responsable Estructura
Auditoría Año Emision
Eduardo SC Auditoría Proceso de Gastos Generales - 07 2007
Eduardo SC Auditoría Proceso de Gastos Generales - 07 2007
Eduardo SC Auditoría Proceso de Gastos Generales - 07 2007
Eduardo SC Comisiones y otros Gastos de Adquisición 2007
Eduardo SC Comisiones y otros Gastos de Adquisición 2007
Eduardo SC Comisiones y otros Gastos de Adquisición 2007
Eduardo SC Comisiones y otros Gastos de Adquisición 2007
Eduardo SC Comisiones y otros Gastos de Adquisición 2007
Eduardo SC Impuestos Locales -
06 2007
Jose FILIALES Defensa Legal -
07 2007
Jose FILIALES Defensa Legal -
07 2007
Jose FILIALES Defensa Legal -
07 2007
Jose FILIALES Defensa Legal -
07 2007
Jose FILIALES Defensa Legal -
07 2007
Tania SC Autos – Fase V, Análisis de Proveedores 2008
Tania SC Autos – Fase V, Análisis de Proveedores
2008
Tania SC Autos – Fase V, Análisis de Proveedores 2008
Tania SC Autos – Fase V, Análisis de Proveedores 2008


Como puedes ver el codigo que me ayudaste a hacerle el cambio se va
por la columna A quitando los duplicados y sus filas, ya modificando
el rango de celdas claro esta. pero lo que yo necesito es que no me
tome la columna A sino la C donde vendrian las auditorias, y asi
automaticamente va a quitar los demas y me va a dejar las que son, los
nombres de los auditores no me importa que no se repitan

Gracias
Respuesta Responder a este mensaje
#4 Héctor Miguel
02/09/2008 - 17:20 | Informe spam
hola, Ricardo !

... ya funciona bien, pero has de cuenta que tengo varios datos desde la columna A hasta AH
ahora para eliminar los elementos duplicados me quiero guiar por la columna C
(que de esa columna vea cuales son los que se repiten y que solo deje un solo valor
ya que me toma de la columna A y si lo hace pero no como lo que yo quiero)
ME deberia de dejar en total cerca de 10 valores y me deja 5 que son los datos que se repiten en la columna A
y yo los que necesito son de la columna C, como le puedo hacer...



del codigo que expusiste originalmente, hay una indicacion que precisa cual es la columna donde se ejecuta el bucle...
_____
' Para especificar una columna diferente, cambie el valor 1 en el numero de columna.



y que significa que el 1 corresponde a la columna A en todas las instrucciones que hacen referencia a Cells(iCtr, 1)
por lo que si deseas que sea la columna C, cambia ese numero en todas las instrucciones a: -> .Cells(iCtr, 3)
_____
For iCtr = 1 To iListCount ' No comparar contra si mismo.
If ActiveCell.Row <> Sheets("Indicadores Internas").Cells(iCtr, 1).Row Then
' Comparar el registro siguiente.
If ActiveCell.Value = Sheets("Indicadores Internas").Cells(iCtr, 1).Value
Then ' Si la coincidencia es verdad, eliminar la fila.
Sheets("Indicadores Internas").Cells(iCtr, 1).Delete xlShiftUp ' Contador de incrementos para contar la fila eliminada.



saludos,
hector.
Respuesta Responder a este mensaje
#5 mis_pistolas
02/09/2008 - 17:36 | Informe spam
On 2 sep, 10:20, "Héctor Miguel"
wrote:
hola, Ricardo !

> ... ya funciona bien, pero has de cuenta que tengo varios datos desde la columna A hasta AH
> ahora paraeliminarlos elementos duplicados me quiero guiar por la columna C
> (que de esa columna vea cuales son los que se repiten y que solo deje un solo valor
> ya que me toma de la columna A y si lo hace pero no como lo que yo quiero)
> ME deberia de dejar en total cerca de 10 valores y me deja 5 que son los datos que se repiten en la columna A
> y yo los que necesito son de la columna C, como le puedo hacer...

del codigo que expusiste originalmente, hay una indicacion que precisa cual es la columna donde se ejecuta el bucle...
_____

> ' Para especificar una columna diferente, cambie el valor 1 en el numero de columna.

y que significa que el 1 corresponde a la columna A en todas las instrucciones que hacen referencia a Cells(iCtr, 1)
por lo que si deseas que sea la columna C, cambia ese numero en todas las instrucciones a: -> .Cells(iCtr, 3)
_____

> For iCtr = 1 To iListCount ' No comparar contra si mismo.
> If ActiveCell.Row <> Sheets("Indicadores Internas").Cells(iCtr, 1).Row Then
> ' Comparar el registro siguiente.
> If ActiveCell.Value = Sheets("Indicadores Internas").Cells(iCtr, 1).Value
> Then ' Si la coincidencia es verdad,eliminarla fila.
> Sheets("Indicadores Internas").Cells(iCtr, 1).Delete xlShiftUp ' Contador de incrementos para contar la fila eliminada.

saludos,
hector.



Saludos Hector, diras que como doy lata, ya hice la modificacion en
los tres .Cells(Ictr,1).Rox que vienen en el codigo, cambie los 1 por
3, ejecuto la macro pero no borra los registros se queda penasndo un
rato y ya me despliega la ventana que dice "listo" pero no mas a que
crees que se deba.

Gracias
y disculpa
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida