Formulação do problema
Vamos supor que precisamos criar um conjunto de números aleatórios inteiros sem repetições em um determinado intervalo de valores. Exemplos em movimento:
- gerando códigos aleatórios exclusivos para produtos ou usuários
- atribuir pessoas a tarefas (cada uma aleatoriamente da lista)
- permutação de palavras na consulta de pesquisa (olá seo-shnikam)
- jogando na loteria etc
Método 1. Simples
Para começar, vamos considerar uma opção simples: precisamos obter um conjunto aleatório de 10 inteiros de 1 a 10. Usando a função incorporada ao Excel ENTRE O CASO (BORDA ENTRE) a exclusividade não é garantida. Se você inseri-lo em uma célula da planilha e copiá-lo em 10 células, as repetições podem acontecer facilmente:
Portanto, iremos por outro caminho.
Todas as versões do Excel têm uma função RANK (TOCOU), destinado a classificar ou, em outras palavras, determinar a posição superior de um número em um conjunto. O maior número na lista tem rank=1, o segundo no topo tem rank=2 e assim por diante.
Vamos inserir a função na célula A2 SLCHIS (RAND) sem argumentos e copie a fórmula em 10 células. Esta função nos gerará um conjunto de 10 números fracionários aleatórios de 0 a 1:
Na próxima coluna introduzimos a função RANKpara determinar a posição no ranking para cada número aleatório recebido:
Obtemos na coluna B o que queríamos – qualquer número desejado de inteiros aleatórios não repetidos de 1 a 10.
Puramente teoricamente, uma situação pode surgir quando SLCHIS nos dará dois números aleatórios idênticos na coluna A, seus ranks serão iguais e teremos uma repetição na coluna B. No entanto, a probabilidade de tal cenário é extremamente pequena, dado que a precisão é de 15 casas decimais.
Método 2. Complicado
Esse método é um pouco mais complicado, mas usa apenas uma fórmula de matriz. Digamos que precisamos criar uma lista de 9 inteiros aleatórios não repetidos no intervalo de 1 a 50 em uma folha.
Digite a seguinte fórmula na célula A2, clique no final Ctrl + Shift + Enter (para inseri-lo como uma fórmula de matriz!) e copie a fórmula para o número desejado de células:
Método 3. Macro
E, claro, você pode resolver o problema usando programação em Visual Basic. Em um dos artigos antigos sobre amostragem aleatória, já citei a função macro Lotto array, que produz o número necessário de números aleatórios não repetidos a partir de um determinado intervalo.
- Como contar o número de valores únicos em um intervalo
- Seleção aleatória de elementos de uma lista