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