Planilha de Sorteio Excel VBA 2.0

Planilha de Sorteio Excel VBA 2.0

Objetivo: Disponibilizar uma planilha Excel de sorteio que não repita os nomes sorteados e crie uma lista dos nomes já sorteados.

Esta é uma ideia do amigo Cleiton Domingues que me enviou por e-mail, obrigado Cleiton.

Esta planilha auxilia no sorteio de brindes em festas ou reuniões de empresas, bem como qualquer outro tipo de sorteio.

A planilha funciona da seguinte forma:

1. Na planilha Nomes para o sorteio apague todos os nomes que existem nesta lista e coloque um número ao lado de cada nome, pode preencher os dois primeiros números na coluna A somente, em seguida selecionar as células A1 e A2 e dar um duplo clique no cantinho inferior direito desta seleção para que esta lista seja preenchida automaticamente;

2. Agora a planilha já está pronta para funcionar. Clique no botão Limpar sorteados, a planilha irá limpar os dados da sua última utilização, aperte somente quando já houver terminado o sorteio de todos os nomes, pois ele limpará os nomes que já saíram;

3. Clique no botão Sortear, a planilha irá sortear aleatoriamente um nome na sua lista, guardará o nome sorteado na planilha Sorteados e retirará o nome que já saiu;

4. Ao concluir, clique na planilha sorteados aonde você terá todos os nomes que foram sorteados.

Abaixo o código fonte comentado:

'Debugar
'Dim l As Long

'Código principal que realiza o sorteio
Public Sub AleatorioEntreFixo()
    Dim lUltimaLinhaAtiva As Long
    
    Application.Volatile
       
    'Identifica a última célula ativa da lista
    lUltimaLinhaAtiva = Worksheets("Lista").Cells(Worksheets("Lista").Rows.Count, 2).End(xlUp).Row
    
    'Realiza o sorteio fazendo 100 vezes o randômico
    For i = 1 To 100
        Range("A7").FormulaR1C1 = "=VLOOKUP(RANDBETWEEN(1," & lUltimaLinhaAtiva & "),Lista!C[0]:C[1],2,0)"
    Next i
    
    'Debugar
    'Sheets("Nomes para o sorteio").Range("g" & (l + 1)).Value = "'" & Range("A7").FormulaLocal
    'l = l + 1
    
    'Desabilita a atualização de tela para ela não ficar "piscando"
    Application.ScreenUpdating = False
    
    'Copia o nome sorteado para a planilha de sorteados
    Range("A7").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    Range("A7").Select
    Selection.Copy
    Sheets("Sorteados").Select
    
    lUltimaLinhaAtiva = Worksheets("Sorteados").Cells(Worksheets("Sorteados").Rows.Count, 1).End(xlUp).Row
    
    If Range("A1").Value <> "" Then
        Range("A" & lUltimaLinhaAtiva + 1).Select
    Else
        Range("A" & lUltimaLinhaAtiva).Select
    End If
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    'Retira o nome já sorteado
    lsLocalizarApagar
    
    Sheets("Sorteio").Select
    
    'Volta a atualizar a tela
    Application.ScreenUpdating = True
    
End Sub

'Limpa os nomes sorteados
Sub lsLimparSorteados()
    lsCopiaNomesSorteio

    Sheets("Sorteados").Select
    Columns("A:A").Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("Sorteio").Select
    'Debugar
    'l = 0
End Sub

'Copia os nomes do sorteio para a lista, os nomes que são colocados não são apagados
Sub lsCopiaNomesSorteio()
    Sheets("Lista").Select
    Range("A:B").Select
    Selection.ClearContents
    Sheets("Nomes para o sorteio").Select
    Range("A:B").Copy
    Sheets("Lista").Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A1").Select
    Sheets("Sorteio").Select
End Sub

'Localiza, apaga o nome sorteado e reordena os números do sorteio
Sub lsLocalizarApagar()
    On Error Resume Next
    
    Dim lColunaApagar As Long
        
    Range("A7").Copy
    Sheets("Lista").Select
    Columns("B:B").Select
    Sheets("Lista").Select
    Selection.Find(What:=Sheets("Sorteio").Range("A7").Value, After:=ActiveCell, _
                   LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                   SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    lColunaApagar = ActiveCell.Row
    Rows(lColunaApagar & ":" & lColunaApagar).Select
    Selection.Delete Shift:=xlUp
    
    lsColocaNumeros
    
    Sheets("Sorteio").Select
End Sub

'Coloca os números novamente do sorteio
Sub lsColocaNumeros()
    Dim lUltimaLinhaAtiva As Long
    
    Application.Volatile
       
    lUltimaLinhaAtiva = Worksheets("Lista").Cells(Worksheets("Lista").Rows.Count, 2).End(xlUp).Row

    If lUltimaLinhaAtiva > 1 Then
        ActiveCell.FormulaR1C1 = "1"
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "2"
        Range("A1:A2").Select
        Selection.AutoFill Destination:=Range("A1:A" & lUltimaLinhaAtiva)
        Range("A1:A" & lUltimaLinhaAtiva).Select
        Range("A1").Select
    Else
        ActiveCell.FormulaR1C1 = "1"
    End If
End Sub

DIGITE O SEU EMAIL PARA FAZER O DOWNLOAD DOS ARQUIVOS: Baixe a planilha

Abraço

Marcos Rieper


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel