Özellik ikonu

Rnd

İndirme izni yok

Genel Bakış

Rnd (Rnd function), VBA'da 0'a eşit ya da 0'dan büyük, 1'den küçük rastgele bir Single sayı döndüren işlevdir. Tek başına ondalık bir sayı verir; belirli bir aralıkta tam sayı, rastgele seçim, çekiliş ya da liste karıştırma gibi işlemler için bu sayı Int işleviyle ölçeklenir. Üretilen dizi Randomize deyimiyle kontrol edilir: her çalıştırmada farklı ya da her seferinde aynı sayılar elde edilebilir.

Söz dizimi​

Rnd işlevinin söz dizimi şöyledir:
VBA 2 satır
Rnd[(Sayı)]
Randomize [Sayı]
  • Sayı (Number): Rnd için isteğe bağlı bir Single ifadesidir. Verilmezse işlev, sıradaki rastgele sayıyı üretir (sıfırdan büyük değerle aynı davranır). Davranışı değerin işareti belirler.
  • Randomize için Sayı: İsteğe bağlıdır. Verilirse rastgele sayı üretecinin başlangıç değeri (seed) olarak kullanılır. Verilmezse sistem saati (Timer işlevinin değeri) başlangıç değeri olur.
Rnd her zaman Single türünde, 0 ile 1 arasında bir değer döndürür. 0 dahil, 1 hariçtir.

Sayı değerine göre davranış​

Rnd işlevinin argümanı, hangi sayının döneceğini belirler:
  • Sıfırdan küçük (örneğin -1): Her seferinde aynı sayıyı verir. Verdiğiniz değer başlangıç değeri olarak kullanılır.
  • Sıfırdan büyük ya da argüman yok: Dizideki bir sonraki rastgele sayıyı verir.
  • Sıfıra eşit: En son üretilen sayıyı yeniden verir; yeni sayı üretmez.
VBA'nın rastgele sayı dizisi, Randomize çağrılmadıkça her oturumda aynı noktadan başlar. Yani Excel'i her açtığınızda ve makroyu çalıştırdığınızda aynı sayıları görebilirsiniz. Her çalıştırmada farklı sonuç istiyorsanız Rnd'den önce bir kez Randomize çağırın. Tekrarlanabilir bir dizi istiyorsanız önce Rnd(-1) sonra Randomize ile sabit bir sayı kullanın.

Belirli aralıkta sayı üretme​

Rnd'nin 0-1 arasındaki değerini istediğiniz aralığa dönüştürmek için genel kalıp şudur. Burada alt ve üst, aralığın en küçük ve en büyük tam sayılarıdır:
VBA
Int((ust - alt + 1) * Rnd + alt)
Ondalıklı bir aralık gerekiyorsa Int kullanmadan şu kalıp yeterlidir:
VBA
alt + (ust - alt) * Rnd
Int işlevi sayıyı aşağı yuvarlar. Bu nedenle kalıptaki "+ 1" sayesinde üst sınır da sonuç olabilir. Bu kalıbı Cells ve Range ile birleştirerek çalışma sayfasına sayı yazabilir, bir listeden rastgele satır seçebilirsiniz.

1. Tekrarlanabilir rastgele notlar​

Sekiz öğrencinin sınav notlarını 50 ile 100 arasında rastgele üretmek istiyorsunuz. Notlar her çalıştırmada aynı çıksın diye önce Rnd(-1), ardından sabit bir sayıyla Randomize kullanılır. Kodu standart bir modüle (Ekle > Modül) yapıştırın.
VBA 15 satır
Option Explicit

Sub RastgeleNotlar()
    Dim i As Long
    Dim d As Single

    ' Tekrarlanabilir dizi: önce Rnd(-1), sonra sabit değerli Randomize
    d = Rnd(-1)
    Randomize 42

    For i = 2 To 9
        ' 50 ile 100 arasında (ikisi de dahil) tam sayı
        Cells(i, 2).Value = Int((100 - 50 + 1) * Rnd + 50)
    Next i
End Sub
Rnd
Formülünü incelemek için bir hücre seçin.
AB
1ÖğrenciSınav Notu
2Ahmet Yılmaz96
3Ayşe Demir81
4Mehmet Kaya58
5Fatma Çelik72
6Mustafa Şahin50
7Zeynep Arslan79
8Emre Koç83
9Elif Aydın51
Sınav NotlarıExcelDepo v1.0.0
Makro B2:B9 aralığına 50 ile 100 arasında notlar yazar; örneğin Ahmet Yılmaz için 96, Ayşe Demir için 81 değeri üretilmiştir. Aynı başlangıç değeri kullanıldığı için makroyu her çalıştırdığınızda aynı notları elde edersiniz. Başlangıç değerini değiştirirseniz farklı bir dizi oluşur.

2. Listeden rastgele kazanan seçme​

Katılımcı listesinden rastgele bir kişiyi çekilişle seçmek istiyorsunuz. Randomize her çalıştırmada farklı bir sonuç vermesini sağlar. Son dolu satır bulunur, 2 ile bu satır arasında rastgele bir satır numarası üretilir ve kazananın adı C2 hücresine yazılır. Kodu standart bir modüle yapıştırın.
VBA 18 satır
Option Explicit

Sub CekilisYap()
    Dim sonSatir As Long
    Dim secilen As Long

    ' Her çalıştırmada farklı sonuç için sistem saatiyle başlat
    Randomize

    ' A sütunundaki son dolu satırı bul
    sonSatir = Cells(Rows.Count, 1).End(xlUp).Row

    ' 2 ile sonSatir arasında rastgele satır numarası
    secilen = Int((sonSatir - 2 + 1) * Rnd + 2)

    ' Kazananın adını C2 hücresine yaz
    Cells(2, 3).Value = Cells(secilen, 1).Value
End Sub
Rnd
Formülünü incelemek için bir hücre seçin.
ABC
1KatılımcıŞehirKazanan
2Hasan ÖztürkAnkaraHasan Öztürk
3Selin Yıldızİzmir
4Burak AksoyBursa
5Derya KurtAntalya
6Cem PolatKonya
7Gül ErdoğanAdana
8Oğuz TekinTrabzon
9Nur GüneşEskişehir
ÇekilişExcelDepo v1.0.0
Makro, A2:A9 aralığındaki isimlerden birini rastgele seçer ve C2 hücresine yazar. Bu çalıştırmada çekilişin sonucu Hasan Öztürk olmuştur. Randomize kullanıldığı için makroyu her çalıştırdığınızda başka bir katılımcı çıkabilir. Liste uzarsa kod son satırı otomatik bulduğu için değişiklik gerekmez.

3. Listeyi rastgele karıştırma​

Bir ürün listesini rastgele sıraya dizmek için Fisher-Yates yöntemi kullanılır. Adlar bir diziye alınır, Rnd ile sondan başa doğru yer değiştirilir ve karışık sıra B sütununa yazılır. Sonuç tekrarlanabilsin diye sabit başlangıç değeri verilmiştir. Kodu standart bir modüle yapıştırın.
VBA 33 satır
Option Explicit

Sub ListeyiKaristir()
    Dim dizi() As String
    Dim n As Long, i As Long, j As Long
    Dim gecici As String
    Dim d As Single

    ' Listedeki ürün sayısı (başlık hariç)
    n = Cells(Rows.Count, 1).End(xlUp).Row - 1
    ReDim dizi(1 To n)

    For i = 1 To n
        dizi(i) = Cells(i + 1, 1).Value
    Next i

    ' Tekrarlanabilir sıra için sabit başlangıç değeri
    d = Rnd(-1)
    Randomize 7

    ' Sondan başa doğru rastgele yer değiştir
    For i = n To 2 Step -1
        j = Int(i * Rnd) + 1
        gecici = dizi(i)
        dizi(i) = dizi(j)
        dizi(j) = gecici
    Next i

    ' Karışık listeyi B sütununa yaz
    For i = 1 To n
        Cells(i + 1, 2).Value = dizi(i)
    Next i
End Sub
Rnd
Formülünü incelemek için bir hücre seçin.
AB
1ÜrünKarışık Sıra
2Dizüstü BilgisayarFare
3YazıcıTarayıcı
4MonitörKlavye
5KlavyeYazıcı
6FareMonitör
7TarayıcıWeb Kamerası
8KulaklıkKulaklık
9Web KamerasıDizüstü Bilgisayar
Ürün SırasıExcelDepo v1.0.0
A sütunundaki sekiz ürün adı, B sütununa rastgele bir sırayla yazılır; karışık listenin ilk ürünü Fare, ikincisi Tarayıcı olmuştur. Her ürün B sütununda yalnız bir kez görünür, çünkü yöntem yeni sayı çekmek yerine mevcut öğelerin yerini değiştirir. Orijinal liste A sütununda değişmeden kalır.

Kullanırken dikkat edin​

  • Randomize'ı döngü içinde çağırmayın: Randomize'ı bir döngünün içinde tekrar tekrar çalıştırırsanız, zaman değeri çok yakın olduğu için aynı ya da birbirine çok benzer sayılar üretilebilir. Randomize'ı yordamın başında yalnızca bir kez çağırın.
  • Randomize olmadan her oturumda aynı dizi: Randomize çağırmadan Rnd kullanırsanız Excel her açıldığında aynı sayı dizisi üretilir. Bu, test sırasında işe yarar ama gerçek rastgelelik beklediğiniz çekiliş ve benzeri işlerde sorun yaratır.
  • Tekrarlanabilir dizi için sıra önemlidir: Aynı sayı dizisini yeniden elde etmek için önce Rnd(-1), sonra Randomize ile sabit bir sayı çağırın. Sıra ters olursa ya da Rnd(-1) atlanırsa dizi her seferinde aynı olmayabilir.
  • Int ve üst sınır: Rnd hiçbir zaman 1 değerini döndürmez. Bu yüzden tam sayı üretirken (üst - alt + 1) çarpanını kullanmayı unutmayın; aksi halde üst sınır hiç çıkmaz. Int yerine Round kullanmak uçlardaki sayıların daha seyrek çıkmasına yol açar.
  • Güvenlik için uygun değildir: Rnd, tahmin edilebilir bir sözde rastgele sayı üretecidir. Parola, anahtar ya da güvenliğin önemli olduğu başka işler için kullanmayın.
  • Çalışma sayfası işlevleriyle farkı: Hücrede rastgele sayı gerekiyorsa RASTGELE ve RASTGELEARADA işlevleri kullanılabilir; bunlar sayfa her hesaplandığında değişir. VBA'daki Rnd değeri ise makro çalıştığında üretilir ve hücreye değer olarak yazılırsa sabit kalır.
  • İlgili konular:
    • Randomize deyimi: Rnd için başlangıç değerini belirler.
    • Int işlevi: Rnd sonucunu tam sayıya çevirmek için kullanılır.
    • Timer işlevi: Randomize'ın varsayılan başlangıç değeri olarak kullandığı saat değeri.
    • RASTGELE ve RASTGELEARADA: Çalışma sayfasındaki rastgele sayı işlevleri.
    • WorksheetFunction.RandBetween: VBA'dan RASTGELEARADA işlevini çağırma yolu.
    • Cells ve Range nesneleri: Üretilen sayıları sayfaya yazmak için.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
9
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst