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?
 
Katılım
29 Eylül 2004
Mesajlar
1,810
Excel Vers. ve Dili
Excel 2002 TR
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
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
[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ü.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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]
 
Katılım
2 Temmuz 2005
Mesajlar
80
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
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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.
 
Katılım
2 Temmuz 2005
Mesajlar
80
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..
 
Üst