Selección de columnas aleatorias con macro

Dentro de una macro quiero seleccionar un grupo de columnas aleatorias y después insertar una columna en blanco para después en esa columna poner una categoría. He hecho dos macros una es muy larga ya que no es aleatoria:

Sub Macro4()
Worksheets("Hoja1").Activate
Dim myUnion As Variant
Set myUnion = Union(Columns(1), Columns(5), Columns(10))
Union(Columns(1), Columns(5), Columns(10)).Select
End Sub

El problema es que si quiero seleccionar 50 columnas pues no es nada práctico.

Traté de hacer otra con variables pero el resultado sólo me selecciona una columna:

Dim X, Y As Integer
X = ActiveCell.Row
Y = ActiveCell.Column
Cells(1, 5).Select
X = 1
Y = 4
For Y = 4 To 20 Step 4
Z = Cells(X, Y).EntireColumn.Address
Next Y
Range(Z).Activate
End Sub

¿Sabes como hacerla estimado experta(o)?

Muchas gracias ;)

1 Respuesta

Respuesta
1

Puedes poner un ejemplo de lo que necesitas, es decir, quieres que de las columnas A a la M, ¿seleccione una columna al azar?

Suponiendo que elijo al azar la columna "K", ¿después qué hago?

Si supongamos que quiero seleccionar las columnas 5, 10, 15, 20,....,85,90,95,100 o bien quiero seleccionar las columnas 4,8,12,16,20,24,.......,96,100,104,108 o las columnas 1,2,3,4,5,...,15 o las columnas 3,6,9,12,15,18, o las columnas 20,40,60,80,100,120.

Es decir el espacio entre columnas siempre es el mismo lo que es diferente es el número de columnas que se seleccionan y que la selección puede empezar en cualquier número dependiendo de como venga el archivo de excel. Muchas Gracias.

En tus ejemplos el espacio entre columnas es variable, en el primer ejemplo el espacio es 5, en el segundo el espacio es 4, entonces,
- ¿Quieres qué el espacio entre columnas sea aleatorio?
- Quieres que el número de columnas sea aleatorio y que empiece en 1, puede seleccionar, ¿sólo una columna? ¿O cuál sería el valor mínimo y cuál sería el valor máximo?

si son variables el número de columnas a seleccionar, el espacio entre las mismas es otra variable y el lugar en el que empieza también es variable.

Por eso había puesto esta macro:

Sub Macro4()
Worksheets("Hoja1").Activate
Dim myUnion As Variant
Set myUnion = Union(Columns(1), Columns(5), Columns(10))
Union(Columns(1), Columns(5), Columns(10)).Select
End Sub

Pero si por ejemplo mis columnas son ahora 4,8,12,......32,36 entonces tengo que escribir:

Sub Macro4()
Worksheets("Hoja1").Activate
Dim myUnion As Variant
Set myUnion = Union(Columns(4), Columns(8), Columns(12),...,Columns(32),Columns(36))
Union(Columns(4), Columns(8), Columns(12),...,Columns(32),Columns(36)).select
End Sub

El problema es que siempre tendría que hacer esto.

Gracias y recibe un cordial, cordial saludo.

Te envío una macro con las tres variables, inicio columna, espacio entre columnas y número de columnas, todas se obtienen aleatoriamente.

Sub selcol()
'Por.DAM 'selecciona varias columnas aleatoriamente
    i = Evaluate("=RANDBETWEEN(1,10)")  'variable columna inicial
    e = Evaluate("=RANDBETWEEN(1,5)")   'variable espacio entre columnas
    c = Evaluate("=RANDBETWEEN(1,20)")  'variable número de columnas
    For j = 1 To c
        cadena = Columns(i).Address(False, False) & "," & cadena
        i = i + e
    Next
    Range(Left(cadena, Len(cadena) - 1)).Select
End Sub

Saludos.DAM
Si es lo que necesitas.

Guau...en serio ustedes si que son expertos, llevo como una semana pensado como hacerla, se que hacen una labor altruista. Te agradezco muchísimo experto DAM. Recibe un cordial saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas