Pennafortt Posted October 21, 2012 at 08:51 PM Report #479948 Posted October 21, 2012 at 08:51 PM Boas Uso esse gerador para fins diversos e é muito bom, mas como fazer o sorteio acontecer em determinado intervalo, uma vez que sempre roda a partir do intervalo A2. Sub Sorteio_de_Numeros() Dim a, b, c(99) s = 10 d = 50 For lin = 2 To s + 1 For a = 1 To 99 c(a) = a Next For a = 1 To d b = 1 + Int(Rnd * (99 - b)) Cells(lin, a).Select Cells(lin, a).Value = c(b) c(b) = c(99 - b) Next Next Range("A1").Select End Sub Cumps
thoga31 Posted October 22, 2012 at 08:20 PM Report #480037 Posted October 22, 2012 at 08:20 PM Em VBA, para dar num intervalo entre A e B usa-se, por exemplo, este método: Int ((B - A + 1) * Rnd + A) Knowledge is free!
acao Posted October 22, 2012 at 08:22 PM Report #480038 Posted October 22, 2012 at 08:22 PM (edited) boas amigo eu vejo aqui duas situações que não estarão correctas: 1. For a = 1 To 99 c(a) = a Next .......' o c(a) é sempre 99, por isso o Next deveria estar talvez junto aos outros Nexts. 2. For a = 1 To d b = 1 + Int(Rnd * (99 - b)) Cells(lin, a).Select Cells(lin, a).Value = c(b) c(b) = c(99 - b) Next ....' aqui tens outro for com a variavel «a» que coloca o valor da variavel com valor 1 não sei se será isto que tu queres. Edit: Thoga31 peço desculpa não sabia que já tinhas respondido, colocas-te o post enquanto eu escrevi. cumps acao Edited October 22, 2012 at 08:28 PM by acao
Pennafortt Posted October 22, 2012 at 08:30 PM Author Report #480040 Posted October 22, 2012 at 08:30 PM Boas Na verdade o código foi postado com algumas incorreções, segue o código com as correções. O que preciso é indicar um intervalo previamente informado, que não seja fixo, tipo F5:M5 ou outro qualquer. Sub Sorteio_de_Numeros() Dim a, b, c(98) s = 1 d = 8 For lin = 2 To s + 1 For a = 1 To 98 c(a) = a Next For a = 1 To d b = 1 + Int(Rnd * (98 - b)) Cells(lin, a).Select Cells(lin, a).Value = c(b) c(b) = c(99 - b) Next Next Range("D8").Select End Sub Cumps
acao Posted October 22, 2012 at 09:01 PM Report #480043 Posted October 22, 2012 at 09:01 PM boas o erro está aqui: For lin = 2 To s + 1 assim só faz uma linha porque 2 = 2 faz assim: s= 10 ' maior que 2 ou seja as linhas que queres que preencha, For lin = 2 To s cumps acao
Pennafortt Posted October 22, 2012 at 11:17 PM Author Report #480050 Posted October 22, 2012 at 11:17 PM (edited) Boas Acao O código foi escrito para que preencha apenas uma linha com os resultados. O que preciso é de alguma instrução para atribuir determinada linha para mostrar o resultado. Por exemplo mostrar o resultado no intervalo AA4:AH4 Cumps Edited October 22, 2012 at 11:19 PM by Pennafortt
acao Posted October 24, 2012 at 12:35 AM Report #480186 Posted October 24, 2012 at 12:35 AM boas tens aqui. Dim a, b, c(98) s = 1 d = 8 Dim vImpNum As Range Set vImpNum = Range("AA4:AH4") For lin = 1 To s For a = 1 To 98 c(a) = a Next For a = 1 To d b = 1 + Int(Rnd * (98 - b)) 'Cells(lin, a).Select vImpNum.Cells(lin, a).Value = c(b) c(b) = c(99 - b) Next Next Range("D8").Select cumps acao
Pennafortt Posted October 24, 2012 at 12:43 AM Author Report #480188 Posted October 24, 2012 at 12:43 AM Boas Mais uma vez agradeço a gentileza da ajuda. 👍 Cumps
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now