MACRO ELIMINAR REPETIDOS

29/10/2003 - 18:33 por Ing. Héctor Montero S. | Informe spam
Disculpen, pero estuve revisdando y no hallé nada al respecto, pienso que en
algún momento yo u otra persona hizo esta consulta.
resulta que muchas veces bajo algunas tablas de un sistema y trae filas
identicas ejemplo.
producto mes monto
a 5 10
a 5 10
c 7 8
c 7 8
a 5 10

Qusiera saber como se hace una macro, de forma que verifique en la columna
donde aparece el PRODUCTO, y que solamente deje ún único registro de forma
que elimine el resto.
O sea como en el modelo adjunto si aparece la letra "a" tres veces que
elimine las dos filas que estan repetidas y deje solo una, en el caso de
"c", solo tiene que eliminar una sola fila.
GRACIAS
HMS

Preguntas similare

Leer las respuestas

#1 Víctor
29/10/2003 - 18:48 | Informe spam
Puedes hacerlo sin necesidad de macros.

Primero, ordena la base de datos por columna A, columna B
y columna C (suponiendo que sean ésas las utilizadas en
tu base de datos).

Después, selecciona Menú, Datos, Filtro, Filtro avanzado,
y en el cuadro de diálogo activa la opción 'Sólo
registros únicos'. De esta forma, la base de datos
quedará restringida a los registros que te interesan.

Copia esos registros a otra zona de la hoja, y ya está.

:-)


Disculpen, pero estuve revisdando y no hallé nada al


respecto, pienso que en
algún momento yo u otra persona hizo esta consulta.
resulta que muchas veces bajo algunas tablas de un


sistema y trae filas
identicas ejemplo.
producto mes monto
a 5 10
a 5 10
c 7 8
c 7 8
a 5 10

Qusiera saber como se hace una macro, de forma que


verifique en la columna
donde aparece el PRODUCTO, y que solamente deje ún único


registro de forma
que elimine el resto.
O sea como en el modelo adjunto si aparece la letra "a"


tres veces que
elimine las dos filas que estan repetidas y deje solo


una, en el caso de
"c", solo tiene que eliminar una sola fila.
GRACIAS
HMS



.

Respuesta Responder a este mensaje
#2 Ing. Héctor Montero S.
29/10/2003 - 19:33 | Informe spam
Gracias Victor
Muy buena tu solución sin embargo, por cuestión de tiempo principalmente,
necesito crear una macro de forma que el usuario final solamente presione un
botón y le haga la tarea en forma automática, esto pues estsa labor hay que
repetirla al menos una siete veces al día, y lo que quiero es automatizarla
Gracias
HMS
"Víctor" wrote in message
news:089901c39e44$ce530d60$
Puedes hacerlo sin necesidad de macros.

Primero, ordena la base de datos por columna A, columna B
y columna C (suponiendo que sean ésas las utilizadas en
tu base de datos).

Después, selecciona Menú, Datos, Filtro, Filtro avanzado,
y en el cuadro de diálogo activa la opción 'Sólo
registros únicos'. De esta forma, la base de datos
quedará restringida a los registros que te interesan.

Copia esos registros a otra zona de la hoja, y ya está.

:-)


Disculpen, pero estuve revisdando y no hallé nada al


respecto, pienso que en
algún momento yo u otra persona hizo esta consulta.
resulta que muchas veces bajo algunas tablas de un


sistema y trae filas
identicas ejemplo.
producto mes monto
a 5 10
a 5 10
c 7 8
c 7 8
a 5 10

Qusiera saber como se hace una macro, de forma que


verifique en la columna
donde aparece el PRODUCTO, y que solamente deje ún único


registro de forma
que elimine el resto.
O sea como en el modelo adjunto si aparece la letra "a"


tres veces que
elimine las dos filas que estan repetidas y deje solo


una, en el caso de
"c", solo tiene que eliminar una sola fila.
GRACIAS
HMS



.

Respuesta Responder a este mensaje
#3 Mario Alberto
29/10/2003 - 19:43 | Informe spam
Héctor :

Esta macro la encontré buscando en el internet, fue hecha por Ricardo
Suárez, creo que es lo que necesitas, una vez marcadas las celdas, las
filtras y eliminas.

Saludos

Mario Alberto

P.D. Tendrías que ordenar tus datos y/o modificar lo necesario para tu
necesidades.


Sub Repeti()
Rem Cuenta y marca las celdas repetidas de una columna
Rem Macro programada por Ing. Ricardo Suárez L.
Rem email:
Dim Mensaje, Estilo, Título, Respuesta
Dim eldato1 As Variant
Dim eldato2 As Variant
Dim contador As Integer

Mensaje = "Esta macro marca y cuenta las celdas con datos iguales."
Mensaje = Mensaje + Chr(13)
Mensaje = Mensaje + Chr(13) + "
Q Plus - Ing. Ricardo Suárez."
Mensaje = Mensaje + Chr(13)
Mensaje = Mensaje + "¿Se procede a Marcar los repetidos?" + Chr(13)
Estilo = 4 ' Define los botones.
Título = "Marca repetidos" ' Define el título.

Respuesta = MsgBox(Mensaje, Estilo, Título)

If Respuesta <> vbYes Then ' El usuario eligió el botón Sí.
GoTo fin
End If

contador = 1
INICIO:
If Cells(ActiveCell.Row, ActiveCell.Column).Value = Empty Then GoTo fin
eldato1 = Cells(ActiveCell.Row, ActiveCell.Column).Value
eldato2 = Cells(ActiveCell.Row + 1, (ActiveCell.Column)).Value
If eldato1 = eldato2 Then GoTo IGUALES
If contador > 1 Then
SendKeys "{RIGHT}", True
Selection.Value = contador
SendKeys "{LEFT}", True
End If
SendKeys "{DOWN}", True
contador = 1
GoTo INICIO

IGUALES:
contador = contador + 1
SendKeys "{RIGHT}", True
Selection.Value = "Repetido"
SendKeys "{LEFT}", True
SendKeys "{DOWN}", True
GoTo INICIO

fin:
End Sub

"Ing. Héctor Montero S." escribió en el mensaje
news:
Disculpen, pero estuve revisdando y no hallé nada al respecto, pienso que


en
algún momento yo u otra persona hizo esta consulta.
resulta que muchas veces bajo algunas tablas de un sistema y trae filas
identicas ejemplo.
producto mes monto
a 5 10
a 5 10
c 7 8
c 7 8
a 5 10

Qusiera saber como se hace una macro, de forma que verifique en la columna
donde aparece el PRODUCTO, y que solamente deje ún único registro de forma
que elimine el resto.
O sea como en el modelo adjunto si aparece la letra "a" tres veces que
elimine las dos filas que estan repetidas y deje solo una, en el caso de
"c", solo tiene que eliminar una sola fila.
GRACIAS
HMS



Respuesta Responder a este mensaje
#4 Juan Carlos Pérez
29/10/2003 - 20:20 | Informe spam
Prueba con esta macro creada por mi y que uso habitualmente en todos mis
programas. Puedes copiarla y pegarla.

Sub Eliminar_Filas_Repetidas ()
'Ordenar Base de Datos por número de referencia de anotacion
Dim UltLineaHoja as long
UltLineaHoja = ActiveSheet.Range("A65536").End(xlUp).Row
With activesheet.Range(Cells(2, 1), Cells(UltLinDestino, 26))
.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"),
Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom
End With
'Borrar Lineas repetidas (la primera de las dos, que será la mas antigua: de
esta forma se guarda siempre la ultima, que puede estar modificada)
For f = 2 To UltLinHoja
If Cells(f, 1) <> "" Then
'La columna que se compara es en este caso la 1 (A)
If Cells(f, 1) = Cells(f + 1, 1) Then
Rows(f).Delete
f = f - 1
End If
End If
Next
End Sub

Tendrás que adaptarla a tus necesidades:
1) Para calcular la ultima linea escrita de la hoja, sustituye la A por la
columna donde se halla el último dato escrito, en la asignación de la
variable UltLineaHoja.
2)En el apartado de ordenación sustituye el 26 por el número de la ultima
columna que utilizas. Es conveniente poner de más, por si acaso utilizaras
mas columnas en un futuro.
3) En el apartado de ordenación de la hoja, existen dos criterios (en este
caso). Se pueden poner hasta tres añadiendo (Key3:=Range("C1"),
Order3:=xlAscending, ) detras de Key2:=Range("B1"), Order2:=xlAscending,
Por otra parte, sustituye las celdas indicadas en Key1, Key2 y Key3 por el
orden de prioridad que desees. Primera ordena por Key1, después por Key2 y
por ultimo por Key3.
Por ejemplo, si quieres que primero ordene por la fila A, PON EN Key1 la
celda A1 y así sucesivamente.
4) En el apartado de eliminación de filas, esta macro compara sólamente el
dato de las celdas en la primera columna (A) (If Cells(f, 1) = Cells(f + 1,
1) Then). No obstante, si quieres comparar varias columnas puedes unir con
"and" tantas celdas como desees. Por ejemplo, si pones
If Cells(f, 1) = Cells(f + 1, 1) and Cells(f, 2) = Cells(f+1, 2) and
Cells(f,3) = Cells(f+1, 3) Then
compara que los datos de las 3 primeras columnas (A, B, C).

Si tienes alguna duda, o no te funciona correctamente, consúltame de nuevo.

Juan Carlos Pérez
Asturias-España

"Mario Alberto" <NOrodriguezSPAMsma@@hPLSotmail.com> escribió en el mensaje
news:
Héctor :

Esta macro la encontré buscando en el internet, fue hecha por Ricardo
Suárez, creo que es lo que necesitas, una vez marcadas las celdas, las
filtras y eliminas.

Saludos

Mario Alberto

P.D. Tendrías que ordenar tus datos y/o modificar lo necesario para tu
necesidades.


Sub Repeti()
Rem Cuenta y marca las celdas repetidas de una columna
Rem Macro programada por Ing. Ricardo Suárez L.
Rem email:
Dim Mensaje, Estilo, Título, Respuesta
Dim eldato1 As Variant
Dim eldato2 As Variant
Dim contador As Integer

Mensaje = "Esta macro marca y cuenta las celdas con datos iguales."
Mensaje = Mensaje + Chr(13)
Mensaje = Mensaje + Chr(13) + "
Q Plus - Ing. Ricardo Suárez."
Mensaje = Mensaje + Chr(13)
Mensaje = Mensaje + "¿Se procede a Marcar los repetidos?" + Chr(13)
Estilo = 4 ' Define los botones.
Título = "Marca repetidos" ' Define el título.

Respuesta = MsgBox(Mensaje, Estilo, Título)

If Respuesta <> vbYes Then ' El usuario eligió el botón Sí.
GoTo fin
End If

contador = 1
INICIO:
If Cells(ActiveCell.Row, ActiveCell.Column).Value = Empty Then GoTo fin
eldato1 = Cells(ActiveCell.Row, ActiveCell.Column).Value
eldato2 = Cells(ActiveCell.Row + 1, (ActiveCell.Column)).Value
If eldato1 = eldato2 Then GoTo IGUALES
If contador > 1 Then
SendKeys "{RIGHT}", True
Selection.Value = contador
SendKeys "{LEFT}", True
End If
SendKeys "{DOWN}", True
contador = 1
GoTo INICIO

IGUALES:
contador = contador + 1
SendKeys "{RIGHT}", True
Selection.Value = "Repetido"
SendKeys "{LEFT}", True
SendKeys "{DOWN}", True
GoTo INICIO

fin:
End Sub

"Ing. Héctor Montero S." escribió en el mensaje
news:
> Disculpen, pero estuve revisdando y no hallé nada al respecto, pienso


que
en
> algún momento yo u otra persona hizo esta consulta.
> resulta que muchas veces bajo algunas tablas de un sistema y trae filas
> identicas ejemplo.
> producto mes monto
> a 5 10
> a 5 10
> c 7 8
> c 7 8
> a 5 10
>
> Qusiera saber como se hace una macro, de forma que verifique en la


columna
> donde aparece el PRODUCTO, y que solamente deje ún único registro de


forma
> que elimine el resto.
> O sea como en el modelo adjunto si aparece la letra "a" tres veces que
> elimine las dos filas que estan repetidas y deje solo una, en el caso de
> "c", solo tiene que eliminar una sola fila.
> GRACIAS
> HMS
>
>
>


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