Tenho uma planilha com 700 números, nomes e status da rifa, preciso sortear com critério de status pago. Sortear somente se o status for "PAGO"
Dei uma olhada bem rápida no seu arquivo. Sugiro o seguinte:
Faça uma coluna, que ficará oculta ao usuário, somente com os nomes de quem pagou. Aplique seu código para sortear nessa coluna.
Se não quiser deixar uma coluna oculta, faça seu código criar essa coluna, sortear, e apagar depois.
Veja se resolve
Sub sorteio() Dim celula As String Dim resultado As Integer Pagos LINHA = 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value While i <> "" LINHA = LINHA + 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value Wend LINHA = LINHA - 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value Randomize: resultado = ((i - 1) * Rnd + 1) MsgBox "O Numero Sorteado é: " + CStr(resultado), vbInformation, "Resultado" End Sub Sub Pagos() Dim iLin As String, lin As String, i As Integer, Ul As String Plan1.Range("E2:E" & Plan1.Cells(Rows.Count, "A").End(xlUp).Row) = "" iLin = Plan1.Cells(Rows.Count, "A").End(xlUp).Row lin = 2 Ul = 2 For i = 2 To iLin If Plan1.Cells(i, 3) = "PAGO" Then Plan1.Cells(Ul, 5) = Plan1.Cells(i, 1) lin = lin + 1 Ul = Ul + 1 End If Plan1.Select Next i End Sub
O essencial faz a vida valer a pena!
@muca é quase uma solução, más precisa amadurecer! o ideal seria uma maneira de colocar uma condição antes do sorteio.
por exemplo, rnd "intervalo" contido em "matriz" se "pago".
algo parecido com isso, não sei se tem uma lógica capaz
tipo um rnd com if
Com InputBox, para escolher PAGO ou NÃO PAGO, e selecionando o número sorteado.
Sub sorteio() Dim celula As String Dim resultado As Integer Escolha LINHA = 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value While i <> "" LINHA = LINHA + 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value Wend LINHA = LINHA - 1 celula = "E" + CStr(LINHA) i = Plan1.Range(celula).Value Randomize: resultado = ((i - 1) * Rnd + 1) Range("A" & CStr(resultado) + 1).Select MsgBox "O Numero Sorteado é: " + CStr(resultado), vbInformation, "Resultado" End Sub Sub Escolha() Dim iLin As String, lin As String, i As Integer, Ul As String, varTexto As String Plan1.Range("E2:E" & Plan1.Cells(Rows.Count, "A").End(xlUp).Row) = "" iLin = Plan1.Cells(Rows.Count, "A").End(xlUp).Row varTexto = InputBox("Insira um texto", "Informe a Condição (PAGO ou NÃO PAGO") Plan1.Range("E1") = varTexto lin = 2 Ul = 2 For i = 2 To iLin If Plan1.Cells(i, 3) = varTexto Then Plan1.Cells(Ul, 5) = Plan1.Cells(i, 1) lin = lin + 1 Ul = Ul + 1 End If Plan1.Select Next i End Sub
O essencial faz a vida valer a pena!
@muca não consegui colocar em pratica, teria como colocar na planilha e repostar?
@muca infelizmente não funcionou. na primeira tentativa sorteou um não pago.
@andregomesmac, veja a gambiarra na Plan2 ... é só apertar DEL em qualquer célula vazia e o sorteio acontece!!!!!!!!!!!!!
PS: você pode combinar com o pessoal ... vou apertar DEL 10x quem aparecer em F2 é o sorteado!!!!!!!!!!!!!
@muca funcionou, obrigado.
tenho um outro arquivo com uma dificuldade bem parecida!
se puder me passa um endereço de email que te envio para ver se pode me ajudar!