Notifications
Clear all

Criar Loop de Macro

4 Posts
3 Usuários
0 Reactions
956 Visualizações
(@thalysr)
Posts: 2
New Member
Topic starter
 

Pessoal,

Encontrei duas macros distintas, porém não consigo interligá-las. Meu intuito é gerar o sorteio de um numero (obtido através de uma caixa de dialogo) determinado de pessoas (Não repetidas).

Segue as macros que consegui até o momento:

Sorteio

Sub sorteio()

Dim contar As Integer
Dim linha As Integer
Dim x As Excel.Range
Dim y As Long

If WorksheetFunction.CountIf(Range("A2:A1001"), ">0") = 0 Then
MsgBox "TODOS NOMES SORTEADOS!", , "Sorteio finalizado!"
Exit Sub
End If

Range("G3").Select
ActiveCell.Interior.Color = vbYellow
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],C[-6]:C[-4],3,0)"

Range("E3").Select
ActiveCell.FormulaR1C1 = _
        "=RANDBETWEEN(MIN(R[-1]C[-4]:R[998]C[-4]),MAX(R[-1]C[-4]:R[998]C[-4]))"
        ActiveSheet.Calculate
    
For y = 1 To 10
    ActiveSheet.Calculate
    Application.Wait Application.Wait(Now + TimeValue("0:00:01") / 1.8)
Next y
    
    Range("E3").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


 Range("G3").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],C[-6]:C[-4],3,0)"
    ActiveSheet.Calculate
    Range("G3").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.Interior.Color = vbGreen
    If Range("N2") = "" Then
    
    Range("N2").Value = Range("G3")
    
    Else
    
     Range("N1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    
    ActiveCell.FormulaR1C1 = Range("G3")
    
    End If

For Each x In Range("A2:A1001")

If x.Value = Range("E3") And contar = 0 Then

x.ClearContents

contar = 1

End If

Next

Range("B1").Select

End Sub

Input e Loop

Sub executarNVezes()
    
    Dim numeroVezes As String
    
    numeroVezes = InputBox("Informe quantas pessoas deverão ser sorteadas:", "Informe", "Apenas números")
    
   
    If Not IsNumeric(numeroVezes) Then
       
        MsgBox "Informe apenas números", vbCritical, "Erro"
      
        executarNVezes
    End If
    
   
    If numeroVezes = "" Then Exit Sub
    
   
    If IsNumeric(numeroVezes) Then
       
        For a = 1 To numeroVezes
          
            If a = numeroVezes Then
          
                MsgBox "Executado último sorteio de um total de " & numeroVezes & ".", vbInformation, "Exemplo"
            Else
                'Senão, vamos executando a rotina e informando do passo em que nos encontramos
                MsgBox "Executando sorteio " & a & " de " & numeroVezes & ".", vbInformation, "Exemplo"
            End If
        Next
    End If
End Sub

Podem me ajudar?

 
Postado : 22/02/2018 11:34 am
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Boa tarde.
Vc quer informar um número numa caixa... por exemplo 20... e a macro devolver um número aleatório entre 1 e 20?
Seria isso?

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 22/02/2018 11:41 am
(@thalysr)
Posts: 2
New Member
Topic starter
 

Quero informar um número na caixa e ele executar o código Sorteio o número de vezes informado na caixa.

 
Postado : 22/02/2018 12:21 pm
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
NÚMEROS ALEATÓRIOS SEM REPETIÇÃO !!!
.
Serve uma solução com fórmula, e super atrasada k?? ... https://www.sendspace.com/file/q6gx0d
.
PS: Se for para Mega Sena, deixe a coluna A com apenas 60 números, e ajuste a matriz da coluna B ... se for para Lotofácil, deixe a coluna A com apenas 25 números, e ajuste a matriz da coluna B ... e assim por diante !!!
.

 
Postado : 28/10/2019 8:33 pm