Cómo acticar celdas de una columna

Buenas tardes: precisaría (y como soy novato no lo logro) construir una macro que activase la primera celda con contenido distinto. Me explico: en la columna C existen nombres (hoja no ordenada). Lo que buscaba es poder seleccionar (celda activa) la primera del primer nombre, luego la primera del segundo nombre y así sucesivamente.
Pongo un ejemplo (columna c): c1 Juan, c2 Juan, c3 Juan, c4 Pepe, c5 Felipe, c6 Pepe, c7 Juan.
Ir a c1, luego a c4, luego a c5.
Todo porque tengo una macro que me crea hojas distintas por cada nombre distinto de la columna c, pero tengo que poner un filtro e ir seleccionando cada nombre y ejecutando la macro cada vez.En definitiva creo (y ojo que soy novato con avaricia) que se trataría de hacer un loop (ir a la celda c1, ejecutar la macro, ir a la celda c4, ejecutar la macro, ir a la celda c5, ejecutar la macro).
Muchas gracias

1 respuesta

Respuesta
1
Lo suyo sería que cargases un vector con los nombres que ya se han introducido. Es decir, cada vez que el vector no contiene el texto a tratar haga una pausa y así se seleccione.
Te pongo una macro que he hecho (en 10 minutos, así que no me pidas mucho) para que veas un ejemplo.
Sub Macro1()
Const MAXFILAS As Long = 65536 'Número máximo de filas. Podría calcularse
Const COLUMNA As String = "C" 'Columna a tratar. Podría pedirse
Const TIEMPOPAUSA As Long = 5000 'Establece el tiempo de la pausa en milisegundos.
Dim i, j, NElementos As Long
'i recorrerá la columna
'j recorrerá el vector
'NElementos indica el número de elementos que tiene el vector
Dim vector(MAXFILAS) As String 'Vector con los nombres distintos de la hoja
Dim flag As Boolean 'Indicará si se ha encontrado o no el nombre de la celda activa en el vector
'OJO: Debes situarte antes en la primera fila de la columna correspondiente. Podría situarse automáticamente
For i = 1 To MAXFILAS
flag = False 'Indicará que no se ha encontrado
j = 0
'Mientras que queden elementos en el vector, no se haya encontrado el elemento y el elemento a buscar contenga texto:
'NOTA: La última condición se hace para no tener que recorrer el vector sin buscar ningún texto. Podría ponerse una codición IF
While Not flag And j < NElementos And ActiveCell.Text <> ""
If ActiveCell.Text = vector(j) Then 'Si se ha encontrado el texto:
flag = True
Else 'Si no se ha encontrado sigue recorriendo
j = j + 1
End If
Wend
If Not flag Then 'Si no se ha encontrado el texto anteriormente
Application. Wait (TIEMPOPAUSA) 'Detiene durante un tiempo la macro para que hagas tus operaciones
vector(NElementos) = ActiveCell.Text
NElementos = NElementos + 1
End If
'Se desplaza una celda:
ActiveCell.Offset(1, 0).Select
Next
End Sub
Si necesitas alguna ayuda más (seleccionar la primera fila, por ejemplo) dímelo. Me gustaría habértelo completado, pero no tengo mucho tiempo para buscar cómo se hacía eso. De todas formas, si no lo sabes vuelve a escribirme en este mismo tema y te lo busco sin problemas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas