Macro para base de datos

Hola.En una hoja de excel tengo en la columna A, comenzando desde A2, 2 celdas con un mismo número(por ejemplo 00008). Los números de las celdas de la columna están ordenados en forma ascendente(del 00001 al 05000). Necesito una macro que compare 2 celdas en la columna, y si son iguales, ubicarse en la superior y eliminar toda la fila. Como los números están ordenados, una está encima de la otra, ya que ambas tienen el mismo número. Espero que se entienda. Muchas Gracias.

1 respuesta

1
Respuesta de
Hola, Sansox!
La macro siguiente hará lo que solicitas, dejando siempre el último valor de una serie de valores repetidos, en tanto estos estén ordenados.
Por lo tanto, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:
Sub eliLinea()
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Value = Ultval Then
ActiveCell.Offset(-1).EntireRow.Delete
Else
ActiveCell.Offset(1).Select
Ultval = ActiveCell.Value
End If
Loop
End Sub
Cierra el editor de Visual Basic y graba el archivo (esto servirá de backup)
Asumiendo que tu lista de datos es continua -no hay celdas en blanco en tal listado- la macro irá comparando los contenidos de las celdas de la columna que hayas elegido como guía y eliminará toda la fila superior si fuera igual a la celda actual. Cuando encuentre una celda vacía, la macro se detendrá.
Pruébalo y dime si funcionó.Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
Un abrazo!
Fernando
*====================================*
La presente respuesta ha demandado un tiempo de lectura,
análisis, elaboración y redacción. A cambio, simplemente,
pretendo que te tomes un minuto para FINALIZARLA, si
hubiera satisfecho -en alguna medida- tu requerimiento.
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó. Gracias...
*====================================*
Ante todo, muchas gracias por tu respuesta. Probé la macro con los siguientes resultados: en una columna ordenada sin celdas repetidas ni vacías, con los números del 1 al 10, la macro me elimina los impares.
Otra prueba: en una columna ordenada con celdas repetidas y no vacías así:1,2,3,4,5,5,7,8,9,10 al aplicar la macro quedan los números 2,4,5,8,10.
¿Puedes explicármelo?. Gracias
Buenas...
Aquí, el orden de los faroles
altera el alumbrado... ;)
No sé por qué pero involuntariamente, invertí el orden de dos instrucciones.
Esta sería la macro con la secuencia correcta:
Sub eliLinea()
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Value = Ultval Then
ActiveCell.Offset(-1).EntireRow.Delete
Else
Ultval = ActiveCell.Value
ActiveCell.Offset(1).Select
End If
Loop
End Sub
Como verás sólo pospuse el avance de linea luego de la captura del valor de la celda actual.
En las pruebas que efectúe (tus ejemplos incluidos) los resultados fueron satisfactorios.
Disculpa el pequeño desliz.
Un abrazo!
Fernando
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: