miércoles, 3 de diciembre de 2008

Elementos repetidos

En lecciones anteriores hemos visto cómo movernos por una lista y cómo eliminar algunos de ellos según nos conviniera.

Ahora vamos a ver cómo podríamos utilizar estas dos cosas vistas en lecciones anteriores para poder eliminar elementos repetidos de una lista.

Eliminar elementos repetidos en una lista: vamos a realizar una macro la cual nos vayamos desplazando por una lista, hasta encontrar un elemento vacío e ir comprobando si un elemento es igual al anterior, si esto es así lo eliminaremos y "subiremos" un lugar la lista para que así no existan lugares vacíos en la lista

El único requisito que hay que cumplir para realizar esta macro es que la lista debe estar completamente ordenada.

Sub EliminarRepetidos()

contador = 0

valor = ActiveCell.Value

ActiveCell.Offset(1, 0).Range("A1").Select

While ActiveCell.Value <> ""

If ActiveCell.Value = valor Then

Selection.Delete Shift:=xlUp

contador = contador + 1

Else

valor = ActiveCell.Value

ActiveCell.Offset(1, 0).Range("A1").Select

End If

Wend

Respuesta = MsgBox("Se han encontrado " & contador & " elementos repetidos", 1, "Número de repetidos")

End Sub

En esta macro estamos utilizando una variable llamada contador la cual nos servirá para contabilizar el número de elementos repetidos que encontramos en la lista. Este valor lo mostramos al finalizar la macro.

Movernos por un libro realizando una acción

En esta lección continuaremos con las macros que nos permiten movernos por nuestro documento.

Buscar una entrada en una lista y borrar toda la fila: vamos a imaginar que tenemos una tabla de datos en la cual nos interesa buscar un elemento determinado y borrar todos los datos que hay en la misma fila. Pongamos el caso que tenemos una tabla con nombre, población y teléfono y deseamos buscar todos los datos de una población determinada y borrar el nombre y la población Para hacer la búsqueda deberemos situarnos en la fila que se encuentra la población.

Sub BorrarFilas()

While ActiveCell.Value <> ""

If ActiveCell.Value <> "Barcelona" Then

ActiveCell.Offset(1, 0).Range("A1").Select

Else

Selection.EntireRow.Delete

End If

Wend

End Sub

Es importante hacer notar que si ejecutamos esta Macro no se podrá deshacer el borrado de las filas que se han eliminado con la Macro.

Buscar el final de una lista con espacios en blanco dentro de ella: imaginemos que tenemos una lista de datos dentro de la que hay espacios en blanco, como mucho un espacio en blanco entre dato y dato. Si utilizásemos la primera macro que hemos creado esta interpretaría como final de la lista el primer espacio en blanco que encontrara. Realizaremos una macro que interpretará el final de la lista cuando encuentre 2 espacios en blanco seguidos.

Sub FinalListaEspecial()

Salir = "No"

While Salir = "No"

While ActiveCell.Value <> ""

ActiveCell.Offset(1, 0).Range("A1").Select

Wend

ActiveCell.Offset(1, 0).Range("A1").Select

If ActiveCell.Value <> "" Then

Salir = "No"

Else

Salir = "Si"

End If

Wend

End Sub