Por que os números do Excel RANDBETWEEN mudam para qualquer operação na planilha?

14

Preciso usar a função RANDBETWEEN do Microsoft Excel e estou ciente de que um novo conjunto de números aleatórios é gerado sempre que você faz qualquer outra coisa em qualquer lugar da planilha. Também estou ciente das soluções alternativas para "congelar" um conjunto de números aleatórios que foi gerado, por exemplo, para classificar n listas de números aleatórios entre a e b. Minha pergunta é a seguinte: POR QUE os números aleatórios gerados mudam? Existe algo no algoritmo que precise disso? O FWIW, o Google Sheets, o LibreOffice Calc e o Apple Numbers exibem o mesmo comportamento.

nowradioguy
fonte
Perguntas com "Por que ...?" geralmente estão fora de tópico aqui, pois provavelmente apenas o autor poderia dar uma resposta definitiva. Sua pergunta não contém a funcionalidade desejada, por isso é difícil sugerir alguma coisa.
Máté Juhász
2
@ MátéJuhász Parece que as respostas dadas mostram que não é difícil ...
Solar Mike
Não é uma resposta, mas aqui está um par de soluções alternativas para quem precisa de um: stackoverflow.com/questions/8011032/...
Adam

Respostas:

28

Charles Williams tem uma boa explicação de como o Excel calcula as coisas e por quê.

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

Em essência, se uma pasta de trabalho contiver funções voláteis (consulte a lista de Charles, uma vez que a função volátil mudou ao longo dos anos com diferentes versões do Excel), um recálculo inteiro da pasta de trabalho será acionado quando qualquer célula da pasta de trabalho for alterada (se o Excel está definido como cálculo automático). Se não houver funções voláteis na pasta de trabalho, apenas as células afetadas pela última alteração serão recalculadas.

Outros aqui declararam que o cálculo automático sempre calculará tudo na pasta de trabalho quando qualquer célula for alterada, mas isso está errado. Somente funções voláteis causam o recálculo automático de todas as células na pasta de trabalho. Sem funções voláteis, o Excel recalcula apenas o que precisa ser recalculado.

É por isso que pessoas como eu, que conhecem a diferença, recomendam fortemente evitar funções voláteis como OFFSET () ou INDIRECT () nas células da planilha, se possível, pois o soro de leite diminui a velocidade da pasta de trabalho, causando um recálculo completo após cada alteração de célula. Aprender a usar INDEX () em vez de OFFSET () pode resultar em melhorias drásticas na velocidade, porque o Index não é volátil (consulte o artigo de Charles para obter mais detalhes).

O mecanismo de cálculo do Excel é baseado na filosofia "recalcular ou morrer" que diferencia o Excel dos produtos concorrentes quando ele estava em desenvolvimento. Confira este artigo: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -odds /

teylyn
fonte
3
Obviamente, se "função volátil" for definida corretamente, não haverá diferença visível entre recalcular tudo e recalcular apenas o necessário, além da velocidade.
hobbs 25/09
12

Outras respostas se concentram na mecânica do recálculo e no papel das funções voláteis, mas acho que isso deixa de lado parte da essência da questão. Ele aborda as regras que foram empregadas, mas não tanto o "porquê". Vou me concentrar nisso.

Conceito de design

Deixe-me começar com um conceito de design e os blocos de construção das planilhas mais modernas. Há uma "divisão de responsabilidade". Funções são rotinas dedicadas que executam uma tarefa específica e fazem isso toda vez que são solicitadas. Além disso, o aplicativo de planilha controla quando solicitado.

As funções, por si só, não contêm lógica para escolher recalcular ou não recalcular. A natureza de todas as funções do Excel é executar algum tipo de operação sempre que acionada. Nenhuma função possui sua própria "memória" de seu valor atual ou um histórico de seus cálculos anteriores. Não há como saber se esta é a primeira vez que lhe pedem para fazer seu trabalho. Portanto, nenhuma função nativa tem a capacidade de executar apenas uma vez. Se qualquer função for recalculada, ela fará o que foi projetada e produzirá um novo valor.

O aplicativo de planilha contém alguma inteligência que permite economizar tempo ignorando recálculos desnecessários (conforme descrito na resposta de teylyn). O único momento em que o recálculo é ignorado é se o aplicativo souber que o valor da função não foi afetado pelas alterações na planilha que acionaram a necessidade de recalcular as coisas.

E se você precisar executar uma função uma vez e preservar seu valor? Tome o seu exemplo de produção de um número aleatório e depois o resultado não será alterado. Isso descreve a criação de constantes geradas aleatoriamente e você pode fazer isso com o Excel.

O Excel não pode saber como você deseja usar seus recursos; se você deseja continuar produzindo novos valores ou preservar o último conjunto. Cada opção é um caso de uso que o Excel suporta. O Excel acomoda os dois casos, fornecendo as ferramentas para calcular novos valores e as ferramentas para preservar valores antigos. Você pode construir o que quiser. Mas o usuário tem a responsabilidade de fazê-lo fazer o que deseja.

Função Lógica

Então, vamos olhar para a lógica do que a função faz. Será que faz sentido que a lógica do recálculo pule uma função aleatória porque seu valor não deve ser afetado por outras alterações na planilha?

A mudança ou não do valor de uma função após o recálculo depende de sua finalidade e em que ela se baseia. Um cálculo em valores constantes sempre produzirá o mesmo resultado. Uma operação baseada nos valores das células que não foram alteradas produzirá o mesmo resultado.

No entanto, algumas funções são projetadas com a intenção e o objetivo de produzir um resultado diferente a cada vez. Considere, por exemplo, funções baseadas no horário atual. Eles produzirão um novo resultado com base no tempo no recálculo. Você não pode ter uma função cujo objetivo seja produzir um valor com base no horário atual e não atualizar quando for recalculado.

O objetivo do controle de recálculo é sempre fazer com que tudo reflita o estado atual das coisas quando o recálculo é acionado. Esse critério não seria atendido se as funções baseadas no horário atual não fossem atualizadas.

As funções "aleatórias", como RANDBETWEEN, têm o objetivo de produzir um novo número aleatório quando recalculadas. É isso que eles pretendem fazer. Você pode argumentar que o recálculo pode ser ignorado porque o valor não deve ser afetado por outras coisas acontecendo na planilha.

Se esse fosse o comportamento padrão, você estaria atualizando a planilha, mas o valor aleatório permaneceria constante. Esse não é um comportamento muito aleatório. Isso suportaria um caso de uso, mas não o outro. Voltando ao conceito básico de design, ele é tratado como qualquer outra função. O comportamento padrão é fazer com que o Excel o recalcule. Se você deseja preservar o valor anterior para seu caso de uso, é sua responsabilidade fazer isso com as ferramentas disponíveis.

fixer1234
fonte
Essa boa explicação, enquanto me leva para mais perto da resposta que procuro, ainda me deixa não convencido. Estou tentando gerar 25 números aleatórios entre 1 e 365; Eu preciso fazer isso VINTE VEZES (sim, é uma simulação do problema de aniversário "clássico"). Depois que eu gerar um conjunto de 25 números aleatórios, gostaria que eles congelassem (1) enquanto eu gerava os outros conjuntos de 25 e (2) para que eu pudesse classificar os 20 conjuntos que acabei de gerar. Eu posso fazer isso usando soluções alternativas sugeridas por outras pessoas aqui, mas isso é uma tarefa bastante comum para muitos estudantes que estudam estatística elementar.
nowradioguy
3
@nowradioguy, qual é a parte que você não está convencido? O Excel funciona de uma certa maneira e estamos meio que presos aos seus recursos e design. Para sua exigência, preservar os resultados é bastante simples, basta fazer várias vezes. Se os números estiverem em uma coluna, selecione e copie o conjunto de 25 em uma única etapa e cole valores especiais em uma célula em outro local. São apenas alguns cliques, provavelmente a maneira mais rápida de fazer isso. A pasta provavelmente disparará um recálculo, então você está pronto para repetir. Você pode fazer 20 séries em alguns minutos. Então divirta-se com isso. :-)
fixer1234
2

Toda alteração na planilha inicia o recálculo automático de todas as fórmulas, que é o comportamento padrão.

Você pode desativá-lo ou congelar o valor real convertendo-o em valor puro (como o oposto de uma fórmula).

MarianD
fonte
1
Entendo isso, mas você saberia POR QUE? Não há nada óbvio sobre por que números aleatórios gerados em uma célula específica seriam afetados por uma operação executada em outro lugar nessa planilha.
precisa saber é o seguinte
3
Como o Excel saberia com antecedência se você deseja um valor aleatório "vitalício" ou se deseja alterá-lo com frequência? O segundo caso é o mais provável (como no caso oposto, você pode digitar o valor aleatório diretamente na célula).
MarianD
Sua declaração está errada. O recálculo automático NÃO causa o recálculo de todas as fórmulas. Somente quando a pasta de trabalho tem funções voláteis.
teylyn
1

É classificada como uma fórmula "volátil" e, como tal, faz parte da lista de funções recalculadas quando uma alteração é detectada ou uma nova função é inserida.

Outra opção a considerar é alternar a planilha para o cálculo manual, para que você controle quando isso acontecer - apenas lembre-se de recalcular, pois qualquer alteração nos valores ou fórmulas não causará um recalculado ...

Solar Mike
fonte
Eu tentei pesquisar no Google "fórmula volátil", e vários links aparecem explicando o que está na lista de fórmulas "voláteis", mas em nenhum lugar posso encontrar uma explicação sobre POR QUE RANDBETWEEN é - ou deve ser - uma fórmula volátil .
precisa saber é o seguinte
1
Alguém poderia assumir porque é "aleatório", por isso é lógico que ele será recalculado toda vez ... Como apontado, se você deseja que seu número aleatório seja corrigido, você tem 2 métodos diferentes - o que significa que ele não será mais alterado. Algumas boas informações aqui: decisionmodels.com/calcsecretsi.htm
Solar Mike
Sim obrigado. esse foi um dos resultados que apareceram na minha pesquisa no Google, mas não aborda diretamente minha pergunta. Pense nisso: se eu estiver fazendo uma operação não relacionada em outra célula e um cálculo ocorrer, qualquer número aleatório gerado anteriormente será gerado novamente e alterado. Faz pouco sentido para mim.
precisa saber é o seguinte
O Excel recalcula os valores das células quando um evento aciona esse processo, e o intervalo entre elas é classificado como volátil (eu fiz uma folha de dados para minha filha, para que fosse recalculada toda vez que pressionava F9 ...) para que seja recalculada, veja aqui também: beatexcel.com/ volátil-funções-excel . Se você deseja que um número aleatório anteriormente pare de mudar, existem dois métodos para conseguir isso.
Solar Mike
@ fixer1234 NÃO TUDO é volátil. Nem toda fórmula é reavaliada quando algo muda em uma planilha. Isso só acontece se a pasta de trabalho contiver fórmulas voláteis. Se você tiver apenas Sum () ou Countif () ou algo parecido, ele apenas recalculará as células afetadas por uma alteração, NÃO a pasta de trabalho wole.
teylyn
0

Apesar dos esforços heróicos para fazer com que isso pareça um recurso e não um bug, acho extremamente improvável que esse comportamento seja rotineiramente vantajoso. "Recursos" facilitam nossa vida, "bugs" dificultam. No meu caso, inserir um rótulo ou explicação em uma célula que não é referenciada por nenhuma outra célula causa uma nova randomização que é inconveniente de se lidar. Eu chamaria isso de "bug".

Sim, eu posso controlar o recálculo manualmente (uma dor) ou colar valores para evitá-la (novamente, uma dor), mas em que casos a re-randomização causada pela entrada de texto em uma região remota da folha facilita a vida?

Mesmo se houver alguma lógica por trás do manuseio de funções "voláteis", pareceria trivialmente fácil acionar o recálculo por meio de critérios apropriados, além de simplesmente pressionar "enter" após a entrada de texto em células não relacionadas e não referenciadas ou por outras edições completamente não relacionadas. Impedir que esse seja o padrão e não consigo imaginar que seria difícil de implementar. Se alguém quiser esse "recurso", poderá ativá-lo, mas não consigo imaginar quando isso seria uma coisa boa. Na melhor das hipóteses, pode ser relativamente inofensivo. Para mim, é um grande aborrecimento por causa do tipo de folha que estou criando.

Por fim - O Analysis Toolpak permite criar distribuições de números aleatórios de várias maneiras, e os intervalos de números criados não recalculam (randômico), a menos que você o solicite. Portanto, recomendo que as pessoas usem o Analysis ToolPak quando ele atender às suas necessidades.

user816299
fonte
Bem-vindo ao superusuário. O site é uma base de conhecimento de soluções, portanto, as postagens das respostas precisam se concentrar nas respostas às perguntas da pergunta. Quase todo o seu post é realmente um discurso retórico, opinião e comentário, o que provavelmente atrairá votos negativos porque não é produtivo dentro da estrutura do site. Seu último parágrafo pode ser promissor. Considere remover todo o resto e expanda o último parágrafo para incluir mais "como", talvez um exemplo. Para iniciantes no Excel, também seria útil mencionar como carregar esse toolpak.
fixer1234