Buenos días, necesito una macro que seleccione cada 3 celdas en la columna A a partir de la celda 1.

Aquí viene la macro que uso pero me da un error (linea en bold):

Sub SelecPas3Celdas()
contador = 0
pasarceldas = 3
primerseleccionar = 1
dfila = 1
ffila = dfila
Do While Cells(ffila, 1) <> ""
If ffila = primerseleccionar Or ffila = contador * pasarceldas + primerseleccionar Then
If contador = 0 Then
cadena = "A" & ffila
Else
cadena = cadena & ",A" & ffila
End If
contador = contador + 1
End If
ffila = ffila + 1
Loop
Range(cadena).Select
End Sub

Gracias por su ayuda.

1 Respuesta

Respuesta
1

Tu programa falla en cuanto la primera celda esté vacía porque no existe un rango válido sobre una cadena vacía. ¿Puedes poner un ejemplo de contenido de celdas y el resultado que esperas? Algo como una columna de datos, incluyendo los vacíos y en negrita los que esperas queden seleccionados.

Adicionalmente, la macro solo funciona para el primer bloque de celdas consecutivas no vacías. ¿Es ese tu caso?

También puede ser interesante pensar en que quieres hacer luego con la selección. Puede resultar más rápido ejecutar la acción sobre las celdas encontradas a medida que se recorren que sobre la selección, pero depende de lo que quieras, claro está.

Hola, gracias por tu interés.

el excel no contiene filas vacías y las celdas contienen texto de tamaño variable (frases...).

Quiero seleccionar el contenido de cada 3 celdas empezando por la primera para poder copiarlas, desplazarlas...

El contenido puede ser, por ejemplo:  "pharmaceutical registry", "law applied in europe" o también una URL como "www.google.com".

Entonces en mi excel tendrías en la columna A:

fila 1:pharmaceutical registry

fila 2:law applied in Europe

fila 3:www.ema.eu

fila 4:pharmaceutical registry 2

fila 5:law applied in USA

fila 6:www.fda.gov

fila 7:information to physicians

La macro no me funciona para ningún bloque; no selecciona nada. El error me aparece en la linea Range(cadena).Select.

Me gustaría poder usar esta macro para seleccionar cada 3 celdas o cada 4, cada por...si fuese posible.

De nuevo muchas gracias.

A mi para el ejemplo que me indicas, siempre que la primera frase esté en A1, me funciona tu macro. Puedes ejecutar el código paso a paso con F8 o cuando se produzca el error situar el cursor sobre "cadena" y así ver qué valor tiene que te provoca el fallo.

No obstante te dejo este otro código, creo que algo más fácil y que te permite parametrizar los saltos de selección.

Sub InterSeleccion(por As Integer)
'Selecciona cada "por" celdas no consecutivas de la columna A
Dim i As Integer
Dim maxi As Integer
Dim r As Range
maxi = Range("A65000").End(xlUp).Row
i = 1 'empieza en la fila 1
Set r = Range("A1") 'y siempre coge la primera
Do
i = i + por
Set r = Application.Union(r, Range("A" & i))
Loop While i < maxi
r.Select
End Sub

Sub MiSeleccion()
Call InterSeleccion(3)
End Sub

Ejecuta la macro MiSelección (cambiando el parámetro, 3 en el ejemplo, por el valor de salto que quieras). Puedes tomar el valor del parámetro de una celda en otra hoja, hacer un cuadro de dialogo que te lo capture, etc... dependiendo del nivel de sofisticación que necesites.

Estupendo!

No acabo de entender porque no me funciona la macro que mande pero usare la que mandaste. Es mas fácil de cambiar el paso.

Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas