Formula y macro que elige una celda aleatoria-mente en Excel
Formula y macro que elige una celda aleatoria-mente en Excel 2010.
.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,
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
.
- Compartir respuesta