Formula y macro que elige una celda aleatoria-mente en Excel

Formula y macro que elige una celda aleatoria-mente en Excel 2010.

1 respuesta

Respuesta
1

.01/09/16

Buenas, Roberto

MS Excel cuenta con una fórmula que genera números aleatorios y que, además, puedes indicarle entre qué límites:

Así:

=ALEATORIO.ENTRE(1,1048576)

Devolverá en cada ciclo un numero que podría ser el de una línea de una hoja de tu archivo.

[Considera si usas coma o punto y coma para separar argumentos de las funciones. Yo usé ","]

Del mismo modo, con:

=ALEATORIO.ENTRE(1,16384)

 obtendrias una columna cualquiera de tu hoja.

Entonces podrías colocar  la primera fórmula en A1 y la segunda en A2

Luego accede al Editor de VBA (Atajo: Alt + F11), inserta un módulo - si no tuvieras uno ya- y pega el siguiente código:

Sub CeldaAzar()
ActiveSheet.Calculate   
    LaFila = Range("A1").Value
    LaColumna = Range("A2").Value
On Error Resume Next
Cells(LaFila, LaColumna).Select
Err.Clear
On Error GoTo 0
End Sub

La ventaja de este modo es que verás en esas dos celdas qué numero de fila y columna se usó para la seleccion de celda.

Alternativamente, si eso no te interesara y quisieras que la rutina tenga todo el control, puedes usar esta variante:

Sub CeldaAzar()
MaxFila = 1048576
MaxCol = 16384
ActiveSheet.Calculate
    LaFila = Int((MaxFila - 1 + 1) * Rnd + 1)
    LaColumna = Int((MaxCol - 1 + 1) * Rnd + 1)
On Error Resume Next
Cells(LaFila, LaColumna).Select
Err.Clear
On Error GoTo 0
End Sub

Como verás el tope de fila y le de columna los defines dentro del código.

Ten en cuenta que, en cualquiera de ambas alternativas, cuanto mayor fuere el tope superior, mayores son las chances de que la celda seleccionada esté muy abajo o muy a la derecha.

Por eso es que te brindo la posibilidad de que limites el area donde moverse con esos valores.

Nota: Desde hace varias semanas este sitio tarda mucho en actualizar las preguntas / respuestas que se envían. Imagino que deben tener saturado los servidores. Habrá que tener paciencia.

.

Gracias Fernando por tu respuesta, pero lo que necesito es lo siguiente:

En el rango a1:a8 tengo 8 números así: 50 51 52 53 54 55 56 57 y deseo una fórmula y una macro que me elija de forma aleatoria uno de esos números en la celda c4, y cuando se seleccione la celda c4 se vea el rango o la dirección del numero elegido aleatoriamente por la fórmula, y también por la macro en la celda c5.

Muchísimas gracias por tu respuesta

Cordialmente, Roberto

Pregunta: A esta macro se le puede agregar  MinFila y MinCol,?  así como tiene MaxFila y MaxCol.

Sub CeldaAzar()
MaxFila = 1048576
MaxCol = 16384
ActiveSheet.Calculate
    LaFila = Int((MaxFila - 1 + 1) * Rnd + 1)
    LaColumna = Int((MaxCol - 1 + 1) * Rnd + 1)
On Error Resume Next
Cells(LaFila, LaColumna).Select
Err.Clear
On Error GoTo 0
End Sub

.

Buenas, Roberto

Viendo tu consulta, parece que no será necesaria macro alguna.

En la siguiente imagen reproduje lo que me comentaste y coloqué dos fórmulas en las celdas C4 y C5 que elige aleatoriamente un numero de la lista indicada y escribe la dirección de la celda seleccionada en la celda siguiente, respectivamente. Las fórmulas incluidas en esas celdas están escritas a la derecha.

Adicionalmente, con la utilidad de Formato Condicional, le agregué la regla que ves en la ventana inferior que pinta la celda que coincide con el número elegido.

Creo que esto cubre tu solicitud y el valor agregado es que es absolutamente automático, sin necesidad de disparar macro alguna.

Prueba presionando la tecla F9 para que veas cómo funciona.

Finalmente y sólo para evacuar tu duda respecto a la macro, podría agregarse MinFila y MinCol en la rutina de la siguiente manera:

LaFila = Int((MaxFila - MinFila + 1) * Rnd + MinFila)

y

LaColumna = Int((MaxCol - MinCol + 1) * Rnd + MinCol)

En aquella macro asumí que siempre sería desde la fila 1. Por eso ves que resta y suma 1

De esta otra manera cubrirías todos los casos.

Ok, Roberto, espero haberte ayudado con esto.

(Para próximas preguntas que hagas -en general- espera a tener resuelto el problema antes de calificar la respuesta de quien te conteste. Tal vez, entonces, creas que la calificación merecía ser otra).

Un abrazo

Fernando

.

No me trabaja, creo que seria más rápido si me enviaras la hoja de excel en un archivo adjunto.

Si fuera posible que la celda C4 apareciera con el signo =, de esta manera: =A2

Si le puedes agregar acceso directo con Ctrl+h

No me trabaja, creo que sería más rápido si me enviaras la hoja de Excel en un archivo adjunto.

Si fuera posible que la celda C4 apareciera con el signo =, de esta manera: =A2

Si le puedes agregar acceso directo con Ctrl+h

Y en cuanto a la macro fue perfecto las  sentencias, solo que le falta que aparezca en la celda D4 el rango del valor que Eligio al azar, de la misma manera que el anterior. Por ejemplo =A2.

e-mail      [email protected]

Mil gracias por tu ayuda.

Roberto.

.

Buenas noches, Roberto

Acabo de enviarte un mail con lo que solicitaste.

Comentame si te llegó y si está OK.

Saludos

Fernando

.

En la celda c4 se ve bien, pero lo que quiero es que al seleccionarla aparezca en la barra de fórmulas o de tareas el rango o dirección de donde proviene ese valor, y que el valor (que debe de ser cualquiera del rango a1:a8) se vea así como esta… en la misma celda c4.

Mil gracias por tu atención,

[email protected]

Roberto.

Nota: Vivo en Texas, EE.UU, pero soy Colombiano.

.

Buenas, Roberto

Si entendí bien lo que quieres es que la misma celda calcule el aleatorio y muestre la dirección de donde lo tomó.

Eso en MS Excel, no es posible. O tiene la fórmula de aleatorio o tiene la dirección.

Por lo tanto, sólo queda una solución por VBA.

Te acabo de enviar el mismo archivo con una segunda hoja y una segunda macro que hace exactamente eso (hopefully)

Abrazo

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas