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