• DİKKAT

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

Rastgele Sayılar ile ilgili If Koşulu Hakkında

Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Arkadaşlar a sütünuna rastgele sayı alıyorum , b sutununda ise a sutununda 50 den büyük olanları 2 ile çarptırıyorum ama çok farklı rakamlar çıkıyor b sutununda..
Yazdığım formülde hiç bir hata göremiyorum.. Bena işlemi yapacak formül değişikliğinden çok nerede hata yaptığımı da anlatabilirmisiniz lütfen ...



216050
 
Merhaba.

A sütununa rastgele sayıyı "RASTGELEARADA"

formül ile mi alıyorsunuz?
Evetse; B sütununa her yeni bir veri girişinizde Rastgele formülü yeniden çalışacak ve yeni rakamlar üretecektir. Onu için her defasında farklı rakam görüyorsunuz.

Denemek için herhangi bir hücreye çift tıklatıp entere bas, rakamların değiştiğini göreceksin.
 
Aşağıdaki şekilde olmaz mı?
Kod:
Sub deneme()
Range("A1:B20").Clear
With Range("A1:A20")
         .Formula = "= Randbetween(10,100)"
         .Value = .Value
     End With
For a = 20 To 1 Step -1
If Cells(a, 1) > 50 Then
Cells(a, 2) = Cells(a, 1) * 2
End If
Next a
End Sub
 
Hocam aslında şunu kullanıyordum

For i = 1 to 99
Round 1 + (rnd * 99 ) burada ben 1 le 99 arası sayı aldığını düşünüyordum, halbuki rnd * 99 + 1 ekliyormuş.. Sonra kendi kendime dedim ki ya ben belirli bir sayı aralığında rastgele sayı almasını istersem ne yapmalıyım diye düşündüm ...

Range sınıfını kullanmadan yine for döngüsünün içinde 50 ila 100 arasında sayı aldıramazmıyız..
Dediğiniz şekilde kesinlikle oluyor ama ben çalıştığım yani pratik yapmaya çalıştığım döngüyü nasıl sonuca ulaştırabilirim..
Round 1 + (rnd * 99 ) Bu koda belirli bir aralık bildirebilirmiyiz...
 
Verdiğiniz formül de aynı sorunu ortaya çarpım sonucu çıkan sonuçlar çok farklılık gösteriyor.
 
Hata bendeymiş verdiğiniz formülde hiç bir problem yok..
 
Cıtır Hocam bir şey soramk istiyorum müsadenle,

Sub deneme()
Range("A1:B20").Clear
With Range("A1:A20")
.Formula = "= Randbetween(10,100)"
.Value = .Value ' Burda value eşitlemenin sebebini öğrenebilirmiyim.. Bunu sildiğimde tutarsız sonuçlar ortaya çıkıyor yine benim yaşadığım sorun gibi.. Herhangi bir açıklaması var mı bunun... Niye eşitlemek zorundayız valueyi...
End With
For a = 20 To 1 Step -1
If Cells(a, 1) > 50 Then
Cells(a, 2) = Cells(a, 1) * 2
End If
Next a
End Sub
 
Kod:
.Value = .Value
Satırını sildiğinizde formul A1:A20 aralığında yazılı kalır ve makro çalıştığı sürece ve her işlemde rastgele sayılar üretmeye devam eder.Bu durumda sizin yaşadığınız sorunun yaşanmasına sebep olur.Yani B1:B20 de ilgisiz sonuçlar olur.Yukardaki kod bir defa rastgele sayı oluştur ve bunları sayıya dönüştürerek formülü yok eder.Daha sonra B1:B20 arasında if şartına uyan işlemi yapar.Umarım doğru açıklayabilimişimdir.
 
Bunu size neden sordum biliyormusunuz.. Sizden yardım istediğim ilk formülle value eşitlemesi yaptığımda sorun ortadan kalkmış oldu..

Sub deneme3()


For b = 20 To 1 Step -1

Sayi2 = "=RANDBETWEEN(10,100)"
Cells(b, 2) = Sayi2
Cells(b, 2).Value = Cells(b, 2).Value Bu formül sorunu ortadan kaldırdı... İlgilendiğiniz için çok teşekkür ederim...

If Cells(b, 2) > 50 Then
Cells(b, 3) = Cells(b, 2) * 2

End If

Next b

End Sub
 
Ben ilgimden dolayı kendimi geliştirmeye çalışıyorum.. Çok fazla anlamıyorum.. Siz olması gerektiği gibi anlatmışsınızdır mutlaka ama bu value meselesini anlayabilecek durumda değilim ve 40 yıl düşünsem aklıma gelmezdi.. Sorunu ortadan kaldırmasındaki mantığı kavrayabilmiş değilim..
 
Ben ilgimden dolayı kendimi geliştirmeye çalışıyorum.. Çok fazla anlamıyorum.. Siz olması gerektiği gibi anlatmışsınızdır mutlaka ama bu value meselesini anlayabilecek durumda değilim ve 40 yıl düşünsem aklıma gelmezdi.. Sorunu ortadan kaldırmasındaki mantığı kavrayabilmiş değilim..
Doğrusu sizin çözüm yönteminizde benim aklıma gelmemişti.Benim yöntemimde formül bir anda belirlediğim alana yazılıp sonra alan sayılarına eşitlenirken.Sizin yönteminizde işlem döngüye sokularak satır satır yapılmakda ve sonuç olarak aynı olay olmakda.Makroyu adım adım çalıştırarak işlemi gözlemliyebilirsiniz.Ben çok güzel bu yöntemide hatırlamış ve yeniden öğrenmiş oldum.
Teşekkür ederim.
 
Son düzenleme:
Farklı bir çözüm olsun.
Kod:
Sub deneme3()
    For b = 20 To 1 Step -1
        Cells(b, 2).Clear
        Cells(b, 3).Clear
        Cells(b, 2) = Int((100 - 10 + 1) * Rnd + 10) '100 ile 10 arasında random sayı üretir. İki sayıyı (100 ve 10 u) değiştirerek istediğiniz aralığı oluşturabilirsiniz.
        If Cells(b, 2) > 50 Then
            Cells(b, 3) = Cells(b, 2) * 2
        End If
    Next b
End Sub
 
Son düzenleme:
Formülü karıştıra karıştıra iyice küçüldü :) Aşağıda ki formül 50 den büyük 100 den küçük sayı aralığını rastgele sıralıyor..

For i = 1 To 20

sayi = 50 + Round(Rnd * 50)
Cells(i, 1) = sayi
If Cells(i, 1) > 50 Then
Cells(i, 2) = Cells(i, 1) * 2
End If

Next i
 
Farklı bir çözüm olsun.
Kod:
Sub deneme3()
    For b = 20 To 1 Step -1
        Cells(b, 2).Clear
        Cells(b, 3).Clear
        Cells(b, 2) = Int((100 - 10 + 1) * Rnd + 10) '100 ile 10 arasında random sayı üretir. İki sayıyı (100 ve 10 u) değiştirerek istediğiniz aralığı oluşturabilirsiniz.
        If Cells(b, 2) > 50 Then
            Cells(b, 3) = Cells(b, 2) * 2
        End If
    Next b
End Sub

Teşekkür ederim... Anladığım kadarıyla bir işlem için bir çok yöntem var.. Harika birşey
 
Alternatif olarak formül yerine doğrudan işlem de kullanılabilir. Ayrıca özel bir amaç yoksa döngüyü tersten başlatmanın da gereği yoktur:

PHP:
Sub rastgele()
    [A1:B20].ClearContents
    For i = 1 To 20
        Cells(i, "A") = WorksheetFunction.RandBetween(10, 100)
        If Cells(i, "A") > 50 Then Cells(i, "B") = Cells(i, "A") * 2
    Next
End Sub
 
Sizce işlem olması gerektiği gibimi.. Yoksa çok mu uzattım


Sub kucuk()

For i = 1 To 20 For i döngüsü ile 1 den 100 e kadar farklı sayılar ürettim

sayi = 1 + Round(Rnd * 100)
Cells(i, 1) = sayi

Next i

ReDim ay(20)

For c = 1 To 20 For c döngüsü ile ürettiğim sayıları küme içine aldım
ay(c) = Cells(c, 1)
Next c

sayi2 = ay(1) Kümenin 1. elemanına sayı2 değişkenini atatım

For k = 1 To 20
If ay(k) < sayi2 Then For k döngüsü ile kümenin 1. elemanını diğer elamanlarla kıyaslayarak en küçük sayıyı buldum...
sayi2 = ay(k)
End If

Next k
Cells(1, 2) = sayi2



End Sub
 
Uzatmışsınız.

Hücreye yazdırmanıza gerek yok. Direk diziye yazdırıp en küçük değeri bulabilirsiniz.
 
Sayın Korhan Hocam,
Sözünü ettiğiniz Hücreye yazdırmanıza gerek yok. Direk diziye yazdırıp en küçük değeri bulabilirsiniz. nasıl yapılıyor?
Saygılarımla
 
Aşağıdaki gibi olabilir.

Kod 1-100 arası rastgele 10 adet sayı üretir. Sonuç olarak en küçük ve en büyük değeri mesaj kutusunda gösterir.

C++:
Option Explicit
Option Base 1

Sub Rastgele_Minimum_Bul()
    Dim Dizi(10), Sayi As Integer, X As Byte
    
    Randomize Timer
    
    For X = 1 To 10
        Dizi(X) = Int(Rnd() * 100 + 1)
    Next

    MsgBox "En küçük değer ; " & WorksheetFunction.Min(Dizi) & Chr(10) & _
           "En büyük değer ; " & WorksheetFunction.Max(Dizi)
End Sub
 
Geri
Üst