Gerar lista de números aleatórios exclusivos usando VBA no Microsoft Excel

Anonim

Neste artigo, criaremos uma função personalizada para gerar uma lista de números únicos e aleatórios entre os intervalos especificados.

Neste exemplo, podemos executar a macro clicando no botão “Enviar”. Antes de executar a macro, temos que inserir valores para quatro parâmetros. Fornecemos o valor limite inferior na célula C12, o limite superior na célula C13, o número de aleatórios exclusivos necessários na célula C14 e o endereço de destino onde a saída é necessária na célula C15.

Explicação lógica

Criamos a função personalizada “UniqueRandomNumbers” para gerar uma lista de números únicos e aleatórios. Esta função usa o número necessário, o limite inferior e o limite superior como parâmetros de entrada.

Criamos a macro “TestUniqueRandomNumbers” para chamar a função personalizada “UniqueRandomNumbers”. Esta macro é executada clicando no botão “Enviar”. Esta macro leva o valor de entrada do usuário na faixa de C12 a C15.

Explicação do código

i = CLng (Rnd () * (ULimit - LLimit) + LLimit)

A fórmula acima é usada para criar o número aleatório entre os limites superior e inferior definidos. A função Rnd () cria um número aleatório entre 0 e 1.

Intervalo (Seleção, Seleção.Offset (Contador - 1, 0)). Valor = _

Application.Transpose (RandomNumberList)

O código acima é usado para transpor a saída da matriz e atribuir a saída ao destino especificado.

Siga abaixo para o código

 Opção Explícita Função UniqueRandomNumbers (NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Declarando variáveis ​​Dim RandColl As Collection Dim i As Long Dim varTemp () As Long' Verificação de validação para o valor especificado pelo usuário If NumCount ULimit Then UniqueRandomNumbers = "O limite inferior especificado é maior do que o limite superior especificado" Exit Function End If If NumCount> (ULimit - LLimit + 1) Then UniqueRandomNumbers = "O número de números aleatórios exclusivos necessários é maior do que o número máximo de números exclusivos que podem existir entre os inferiores limite e limite superior "Exit Function End If 'Criando novo objeto da coleção Set RandColl = New Collection Randomize Do On Error Resume Next' Calculando o número aleatório que existe entre o limite inferior e superior i = CLng (Rnd () * (ULimit - LLimit) + LLimit) 'Inserindo o número aleatório único na coleção RandColl.Add i, CStr (i) On Error GoTo 0' Looping até a coleção ter itens iguais a numCount Loop até RandColl.Count = Num Count ReDim varTemp (1 To NumCount) 'Atribuindo valor dos itens na coleção ao array varTemp Para i = 1 To NumCount varTemp (i) = RandColl (i) Próximo i UniqueRandomNumbers = varTemp Definir RandColl = Nada Apagar varTemp End Function Sub TestUniqueRandomNumbers () 'Declarar variáveis ​​Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String' Obtendo os valores inseridos pelo usuário Counter = Range ("C14"). Valor LowerLimit = Range ("C12" ) .Value UpperLimit = Range ("C13"). Value Address = Range ("C15"). Value 'Chamando a função personalizada UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers (Counter, LowerLimit, UpperLimit)' Selecionando o intervalo de destino (Address) .Selecione 'Atribuindo o valor no intervalo de destino (Selection, Selection.Offset (Counter - 1, 0)). Value = _ Application.Transpose (RandomNumberList) End Sub 

Se você gostou deste blog, compartilhe com seus amigos no Facebook. Além disso, você pode nos seguir no Twitter e no Facebook.

Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar nosso trabalho e torná-lo melhor para você. Escreva para nós no site de e-mail