• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Randomize

Katılım
2 Temmuz 2005
Mesajlar
80
Arkadaşlar Forumda arama yaptım ancak bu konuyla tam alakalı bir çözüm bulamadım onun için sormak zorunda kaldım. Bir döngü içerisinde Rastgele sayı üretip üretilen sayıların aynı olmasını istemiyorum nasıl yapabilirim örnek aşağıda yaptığım şekilde

For i= 1 to 5
For y= 1 to 5
bul=Int (rnd*12) + 1
cells ( i ,y )=bul


Bu işi nasıl sorgulamalıyım?
 
Bunu farklı şekillerde yapmak mümkün .. ben sadece 2 konuya dikkat çekmek istiyorum, daha önce belirlenen sayılarla kontrolü sayfa üstünde yaparsanız hissedilir derecede yavaş olabilir, bu sebeple belirlediğiniz sayıları diziye atıp, tüm dizi bitince sayfaya yazdırın derim.

bir ikinciside (tam sayı kullanacaksınız galiba) bu durumda sayı aralığı (en küçük ve en büyük aralık az olursa) aynı sayıyı belirledikce döngü başa döneceğinden anormal uzun çalışan bir döngü içine düşebilirsiniz.



Sub tekrarlamayanrandom()
Dim seri(100)
j = 0
For i = 1 To 3
For y = 1 To 3
j = j + 1
10
bul = Rnd
For k = 0 To 9
If seri(k) = bul Then GoTo 10
Next k
seri(j) = bul
Next y
Next i
For u = 1 To 9
Cells(u, 1) = seri(u - 1)
Next u
End Sub
 
[vb:1:e7801e0e06]Private Sub benzersiz_rastgele()
Dim arr() As Long
min = InputBox("Üretilecek minimum değeri giriniz")
max = InputBox("Üretilecek maximum değeri giriniz")
ReDim arr(max - min)
say = 0
For i = min To max
arr(say) = i
say = say + 1
Next

For j = 0 To UBound(arr)
x = Int(((max - min) * Rnd))
temp = arr(x)
arr(x) = arr(j)
arr(j) = temp
Next j
For i = 0 To UBound(arr)
Cells(i + 1, 1) = arr(i)
Next


End Sub[/vb:1:e7801e0e06]

Edit:
bir ikinciside (tam sayı kullanacaksınız galiba) bu durumda sayı aralığı (en küçük ve en büyük aralık az olursa) aynı sayıyı belirledikce döngü başa döneceğinden anormal uzun çalışan bir döngü içine düşebilirsiniz

Sayıları dizi içinde birbiri ile rastgele değiştirirsek aynı sayı derdinden kurtuluruz. Böylece çok daha hızlı olur döngü.
 
Birde aşağıdaki kodu deneyin. Sizin başlattığınızdan devam ettirdim.

[vb:1:ed18d72805]Sub random()
For i = 1 To 5
For y = 1 To 5
10 bul = Int(Rnd * 100)
If WorksheetFunction.CountIf(Columns("a:e"), bul) >0 Then GoTo 10
Cells(i, y) = bul
Next: Next
End Sub
[/vb:1:ed18d72805]
 
Sayın Levenm oncelikle ilgilendiginiz icin cok tesekkur ederim.Sayın Danersın 'ın Kodları sayı üretmedi niye bilmiyorum,Sayın Alpenin 'ki işe yaradı ancak Kodlar cok uzun hemde sadece 1 satıra yazıyor .
Sayın Leventm sizin Kodu denedim Oda istedigim aralıklara yazıyor ancak aynı sayılar cıkıyor ve if sartında sonsuz donguye gırıyor ben yukarıdaki verdigim ornekte oldugu gbi toplam 10 satıra sadece1 ile 12 arasında bibirinden frklı 12 tane sayı yazmak istiyorum ..Sayın leventm nasıl yaparım Tesekkurler
 
Aşağıdaki şekilde deneyin. Bu kodda aynı satır veya sütun dizesinde aynı rakam bulunmayacaktır.

[vb:1:8269560029]Sub random()
For i = 1 To 5
For y = 1 To 5
10 bul = Int(Rnd * 12) + 1
If WorksheetFunction.CountIf(Columns(y), bul) > 0 Then GoTo 10
If WorksheetFunction.CountIf(Rows(i), bul) > 0 Then GoTo 10
Cells(i, y) = bul
Next: Next
End Sub
[/vb:1:8269560029]

Not:bir önceki verdiğim kodda aynı rakamı iki defa yazmaması gerekir.
 
Teşekkurler Sayın Leventm istedigim şekilde oldu.Onceki Kodların biryerinde bır degişiklik yapmıstım ondan oyle yazmıstı ama simdi oldu.
Bir oyun yapmaya calısıyorum artık animasyon işini bıraktım ama bakalım bu oyun işini becerebilecekmiyim bilmiyorum sayın levetnm..
 
Geri
Üst