¿Por qué cambian los números de Excel RANDBETWEEN para cualquier operación en la hoja de trabajo?


14

Necesito usar la función RANDBETWEEN de Microsoft Excel, y soy consciente de que se genera un nuevo conjunto de números aleatorios cada vez que haces algo más en cualquier lugar de la hoja de trabajo. También conozco las soluciones para "congelar" un conjunto de números aleatorios que se han generado, por ejemplo, para ordenar n listas de números aleatorios entre ayb. Mi pregunta es esta: ¿POR QUÉ cambian los números aleatorios generados? ¿Hay algo en el algoritmo que lo requiera? FWIW, Google Sheets, LibreOffice Calc, Apple Numbers exhiben el mismo comportamiento.


Preguntas con "¿Por qué ...?" a menudo están fuera de tema aquí, ya que probablemente solo el autor pueda dar una respuesta definitiva. Su pregunta no contiene la funcionalidad deseada, por lo que es difícil sugerirle algo.
Máté Juhász

2
@ MátéJuhász Parece que las respuestas dadas muestran que no es difícil ...
Solar Mike

No es una respuesta, pero aquí hay un par de soluciones para aquellos que lo necesitan: stackoverflow.com/questions/8011032/…
Adam

Respuestas:


28

Charles Williams tiene una buena explicación de cómo Excel calcula las cosas y por qué.

http://www.decisionmodels.com/calcsecretsi.htm

En esencia, si un libro de trabajo contiene funciones volátiles (consulte la lista de Charles, ya que la función volátil ha cambiado a lo largo de los años con diferentes versiones de Excel), se activará un recálculo completo del libro de trabajo cuando se cambie cualquier celda del libro de trabajo (si Excel se establece en cálculo automático). Si no hay funciones volátiles en el libro, solo se recalcularán las celdas afectadas por el último cambio.

Otros aquí han declarado que el cálculo automático siempre calculará todo en el libro de trabajo cuando se cambie cualquier celda, pero eso está mal. Solo las funciones volátiles provocan el recálculo automático de todas las celdas del libro de trabajo. Sin funciones volátiles, Excel recalcula solo lo que necesita ser recalculado.

Es por eso que las personas como yo, que conocen la diferencia, recomiendan encarecidamente evitar funciones volátiles como OFFSET () o INDIRECT () en las celdas de la hoja de trabajo si es posible, ya que el suero ralentizará el libro de trabajo al causar un recálculo completo después de cada cambio de celda. Aprender a usar INDEX () en lugar de OFFSET () puede resultar en mejoras de velocidad dramáticas, porque Index no es volátil (vea el artículo de Charles para más detalles).

El motor de cálculo de Excel se basa en la filosofía de "recalcificar o morir" que distingue a Excel de los productos de la competencia cuando estaba en desarrollo. Echa un vistazo a este artículo: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -posibilidades/


3
Por supuesto, si la "función volátil" se define correctamente, no debería haber una diferencia visible entre recalcular todo y recalcular solo lo que se necesita, aparte de la velocidad.
hobbs

12

Otras respuestas se centran en la mecánica del recálculo y el papel de las funciones volátiles, pero creo que se pierde parte de la esencia de la pregunta. Aborda las reglas que se han empleado, pero no tanto el "por qué". Me enfocaré en eso.

Concepto de diseño

Permítanme comenzar con un concepto de diseño y los componentes básicos de la mayoría de las hojas de cálculo modernas. Hay una "división de responsabilidad". Las funciones son rutinas dedicadas que realizan una tarea específica y lo hacen cada vez que se les pide. Aparte de eso, la aplicación de hoja de cálculo controla cuándo se les pregunta.

Las funciones, en sí mismas, no contienen ninguna lógica para elegir recalcular o no recalcular. La naturaleza de todas las funciones de Excel es realizar algún tipo de operación cada vez que se activa para hacerlo. Ninguna función tiene su propia "memoria" de su valor actual, o un historial de sus cálculos pasados. No tiene forma de saber si es la primera vez que se le pide que haga su trabajo. Por lo tanto, ninguna función nativa tiene la capacidad de ejecutarse solo una vez. Si alguna función se recalcula, hará lo que está diseñado para hacer y producirá un nuevo valor.

La aplicación de hoja de cálculo contiene cierta inteligencia que le permite ahorrar tiempo omitiendo los recálculos innecesarios (como se describe en la respuesta de teylyn). El único momento en que se saltea el recálculo es si la aplicación sabe que el valor de la función no se vio afectado por los cambios en la hoja de cálculo que provocaron la necesidad de volver a calcular las cosas.

Entonces, ¿qué pasa si necesita ejecutar una función una vez y luego preservar su valor? Tome su ejemplo de producir un número aleatorio y luego hacer que el resultado no cambie. Eso describe la creación de constantes generadas aleatoriamente, y puede hacerlo con Excel.

Excel no puede saber cómo quiere usar sus capacidades; si desea continuar produciendo nuevos valores o preservar el último conjunto. Cada opción es un caso de uso que Excel admite. Excel acomoda ambos casos al brindarle las herramientas para calcular nuevos valores y las herramientas para preservar los antiguos. Puedes construir lo que quieras. Pero el usuario tiene la responsabilidad de hacer que haga lo que quiera.

Lógica de la función

Así que veamos la lógica de lo que hace la función. ¿Podría tener sentido que la lógica de recálculo omita una función aleatoria porque su valor no debería verse afectado por otros cambios en la hoja de cálculo?

Si el valor de una función cambia o no en el recálculo depende de su propósito y en qué se basa. Un cálculo en valores constantes siempre producirá el mismo resultado. Una operación basada en valores de celda que no han cambiado producirá el mismo resultado.

Sin embargo, algunas funciones están diseñadas con la intención y el propósito de producir un resultado diferente cada vez. Considere, por ejemplo, funciones basadas en la hora actual. Producirán un nuevo resultado basado en el tiempo de recálculo. No puede tener una función cuyo propósito sea producir un valor basado en la hora actual y que no se actualice cuando se recalcula.

El objetivo del control de recálculo es hacer que todo refleje siempre el estado actual de las cosas cuando se activa el recálculo. Ese criterio no se cumpliría si las funciones basadas en la hora actual no se actualizasen.

Las funciones "aleatorias", como RANDBETWEEN, tienen el propósito de producir un nuevo número aleatorio cuando se recalculan. Eso es lo que están destinados a hacer. Podría argumentar que el recálculo podría omitirse porque el valor no debería verse afectado por otras cosas que suceden en la hoja de cálculo.

Si ese fuera el comportamiento predeterminado, estaría actualizando la hoja de cálculo, pero el valor aleatorio permanecería constante. Ese no es un comportamiento muy aleatorio. Eso apoyaría un caso de uso pero no el otro. Volviendo al concepto de diseño básico, se maneja como cualquier otra función. El comportamiento predeterminado es hacer que Excel lo recalcule. Si desea conservar el valor anterior para su caso de uso, depende de usted hacerlo con las herramientas disponibles.


Esta buena explicación, aunque me acerca a la respuesta que busco, todavía no me convence. Estoy tratando de generar 25 números aleatorios entre 1 y 365; Necesito hacer esto VEINTE VECES (sí, es una simulación del problema de cumpleaños "clásico"). Una vez que genero un conjunto de 25 números aleatorios, me gustaría que lo congelen (1) mientras genero los otros conjuntos de 25 y (2) para poder ordenar los 20 conjuntos que acabo de generar. Puedo hacer esto usando soluciones sugeridas por otros aquí, pero esta es una tarea difícil de comunicar para muchos estudiantes que estudian estadística primaria.
nowradioguy

3
@nowradioguy, ¿por qué no estás convencido? Excel funciona de cierta manera y estamos atascados con sus capacidades y diseño. Para su requerimiento, preservar los resultados es bastante simple, solo debe hacerse varias veces. Si los números están en una columna, seleccione y copie el conjunto de 25 en un solo paso, luego pegue valores especiales en una celda en otro lugar. Son solo unos pocos clics, probablemente la forma más rápida de hacerlo. La pasta probablemente activará un recalc, por lo que está listo para repetir. Puedes hacer 20 series en un par de minutos. Entonces diviértete con eso. :-)
fijador1234

2

Cada cambio en la hoja de trabajo inicia el recálculo automático de todas las fórmulas, que es el comportamiento predeterminado.

Puede deshabilitarlo o congelar el valor real convirtiéndolo en valor puro (como lo opuesto a una fórmula).


1
Entiendo eso, pero ¿podrías saber POR QUÉ? No hay nada obvio sobre por qué los números aleatorios generados en una celda particular se verían afectados por una operación realizada en otra parte de esa hoja de trabajo.
nowradioguy

3
¿Cómo sabría Excel de antemano si desea un valor aleatorio "de por vida" o si desea cambiarlo con frecuencia? El segundo caso es el más probable (como en el caso opuesto, puede escribir el valor aleatorio directamente en la celda).
MarianD

Tu declaración es incorrecta. El recálculo automático NO causa el recálculo de todas las fórmulas. Solo cuando el libro tiene funciones volátiles.
teylyn

1

Se clasifica como una fórmula "volátil" y, como tal, forma parte de la lista de funciones recalculadas cuando se detecta un cambio o se ingresa una nueva función.

Otra opción a tener en cuenta es cambiar la hoja al cálculo manual para que pueda controlar cuándo sucede; solo asegúrese de recordar volver a calcular, ya que cualquier cambio en los valores o fórmulas no causará un nuevo cálculo ...


He intentado buscar en Google "fórmula volátil", y aparecen varios enlaces que explican qué está en la lista de fórmulas "volátiles", pero en ninguna parte puedo encontrar una explicación de POR QUÉ RANDBETWEEN es, o tiene que ser, una fórmula volátil .
nowradioguy

1
Uno supondría que es "aleatorio", por lo que es lógico que vuelva a calcular cada vez ... Como se señaló si desea que su número aleatorio sea fijo, entonces tiene 2 métodos diferentes, lo que significa que ya no cambiará. Alguna buena información aquí: decisionmodels.com/calcsecretsi.htm
Solar Mike

Si, gracias; ese fue uno de los resultados que surgió en mi búsqueda en Google, pero no aborda directamente mi pregunta. Piénselo: si estoy haciendo una operación no relacionada en otra celda, y se produce un cálculo, entonces cualquier número aleatorio generado previamente se genera nuevamente y se cambia. Tiene poco sentido para mí.
nowradioguy

Excel recalcula los valores de las celdas cuando un evento desencadena ese proceso, randbetween se clasifica como volátil (hice una hoja de dados para mi hija, por lo que se recalcula cada vez que presiono F9 ...) para que se recalcule, vea aquí también: beatexcel.com/ funciones-volátiles-excel . Si desea que un número aleatorio anterior deje de cambiar, entonces hay dos métodos para lograrlo.
Solar Mike

@ fixer1234 NO TODO es volátil. No todas las fórmulas se vuelven a evaluar cuando algo cambia en una hoja de cálculo. Eso solo sucede si el libro contiene fórmulas volátiles. Si solo tiene Sum () o Countif () o algo así, solo volverá a calcular las celdas afectadas por un cambio, NO el libro de trabajo de Wole.
teylyn

0

A pesar de los heroicos esfuerzos para hacer que esto suene como una característica y no como un error, me parece extremadamente improbable que este comportamiento sea rutinariamente ventajoso. Las "características" hacen que nuestras vidas sean más fáciles, los "errores" lo hacen más difícil. En mi caso, ingresar una etiqueta o explicación en una celda a la que ninguna otra celda hace referencia provoca una aleatorización que es inconveniente. Yo llamaría a eso un "error".

Sí, puedo controlar el recálculo manualmente (un problema) o puedo pegar valores para evitarlo (nuevamente, un problema), pero ¿en qué casos la aleatorización causada por la entrada de texto en una región remota de la hoja facilita la vida?

Incluso si existe alguna lógica detrás del manejo de funciones "volátiles", parecería trivialmente fácil activar el recálculo mediante criterios apropiados que no sean simplemente presionar "enter" después de la entrada de texto en celdas no relacionadas y no referenciadas, o por otras ediciones completamente no relacionadas. Prevenir eso debería ser lo predeterminado y no puedo imaginar que sea difícil de implementar. Si alguien quiere esa "función", puede activarla, pero no puedo imaginar cuándo sería algo bueno. En el mejor de los casos, podría ser relativamente inofensivo. Para mí, es una gran molestia debido al tipo de hoja que estoy creando.

Finalmente: Analysis Toolpak le permite crear distribuciones de números aleatorios de varias maneras, y los rangos de números así creados no se recalculan (se vuelven a aleatorizar) en absoluto, a menos que se lo indique. Por lo tanto, recomiendo que las personas usen Analysis ToolPak cuando satisfaga sus necesidades.


Bienvenido a Super User. El sitio es una base de conocimiento de soluciones, por lo que las publicaciones de respuestas deben centrarse en las respuestas a lo que se hizo en la pregunta. Casi toda su publicación es realmente una queja, una opinión y un comentario, lo que probablemente atraerá votos negativos porque no es productivo dentro del marco del sitio. Su último párrafo puede ser prometedor. Considere eliminar todo lo demás y expanda el último párrafo para incluir más del "cómo", tal vez un ejemplo. Para los novatos de Excel, también sería útil mencionar cómo cargar ese paquete de herramientas.
Fixer1234
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.