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
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,382
Excel Vers. ve Dili
2019 Türkçe
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.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
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
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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...
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Verdiğiniz formül de aynı sorunu ortaya çarpım sonucu çıkan sonuçlar çok farklılık gösteriyor.
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
Hata bendeymiş verdiğiniz formülde hiç bir problem yok..
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
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.
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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..
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
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:

muratboz06

Destek Ekibi
Destek Ekibi
Katılım
23 Mart 2017
Mesajlar
568
Excel Vers. ve Dili
Office365 TR
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:
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 
Katılım
12 Ekim 2010
Mesajlar
224
Excel Vers. ve Dili
2013 türkçe
Altın Üyelik Bitiş Tarihi
01-03-2021
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
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Uzatmışsınız.

Hücreye yazdırmanıza gerek yok. Direk diziye yazdırıp en küçük değeri bulabilirsiniz.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,823
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
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
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Üst