Microsoft Excel'de VBA kullanarak benzersiz rasgele sayıların listesini oluşturun

Anonim

Bu yazıda, belirtilen aralıklar arasında benzersiz ve rastgele sayıların bir listesini oluşturmak için özel bir işlev oluşturacağız.

Bu örnekte “Submit” butonuna tıklayarak makroyu çalıştırabiliriz. Makroyu çalıştırmadan önce dört parametre için değer girmeliyiz. C12 hücresinde alt limit değerini, C13 hücresinde üst limiti, C14 hücresinde gereken benzersiz rastgele sayısını ve C15 hücresinde hedef adres çıkışının gerekli olduğunu belirttik.

Mantıksal açıklama

Benzersiz ve rastgele sayıların listesini oluşturmak için “UniqueRandomNumbers” özel işlevini oluşturduk. Bu fonksiyon gerekli sayıyı, alt limiti ve üst limiti giriş parametreleri olarak alır.

“UniqueRandomNumbers” özel fonksiyonunu çağırmak için “TestUniqueRandomNumbers” makrosu oluşturduk. Bu makro, “Gönder” düğmesine tıklanarak yürütülür. Bu makro, kullanıcı giriş değerini C12 ila C15 aralığından alır.

Kod açıklaması

i = CLng(Rnd() * (ULimit - LLimit) + LLimit)

Tanımlanan üst ve alt limit arasında rastgele sayı oluşturmak için yukarıdaki formül kullanılır. Rnd() işlevi 0 ile 1 arasında rastgele bir sayı oluşturur.

Aralık(Seçim, Seçim.Ofset(Sayaç - 1, 0)).Değer = _

Application.Transpose(RandomNumberList)

Yukarıdaki kod, dizinin çıktısını transpoze etmek ve çıktıyı belirtilen hedefe atamak için kullanılır.

Lütfen kod için aşağıdan takip edin

 Seçenek Açık İşlev UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Değişkenleri bildirme Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Kullanıcı tarafından belirtilen değer için doğrulama kontrolü If NumCount ULimit Then UniqueRandomNumbers = "Belirtilen alt sınır, belirtilen üst sınırdan büyük" Exit Function End If NumCount > (ULimit - LLimit + 1) ise UniqueRandomNumbers = "Gerekli benzersiz rastgele sayı sayısı, alt arasında bulunabilecek maksimum benzersiz sayı sayısından büyük limit ve üst limit" Çıkış Fonksiyon End If 'Yeni koleksiyon nesnesi yaratılıyor Set RandColl = Yeni Koleksiyon Randomize Do On Error Devam Et Sonraki 'Alt ve üst limit arasında var olan rasgele sayının hesaplanması i = CLng(Rnd() * (ULimit - LLimit) + LLimit) ' RandColl.Add i, CStr(i) On Error GoTo 0 koleksiyonuna benzersiz rasgele sayı ekleme 'Koleksiyonda numCount öğelerine eşit olana kadar döngü RandColl.Count = Num'a kadar döngü Count ReDim varTemp(1 To NumCount) 'Koleksiyondaki öğelerin değerini varTemp dizisine atama For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Erase varTemp End Function Sub TestUniqueRandomNumbers () 'Değişkenleri Declare Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Kullanıcı tarafından girilen değerlerin alınması Counter = Range("C14").Value LowerLimit = Range("C12" .Value UpperLimit = Aralık("C13").Value Address = Range("C15").Value 'Özel işlev çağrılıyor UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Hedef Range(Adres) seçiliyor.'Atama'yı seçin hedefteki değer Range(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub 

Bu blogu beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.

Sizden haber almayı çok isteriz, işimizi nasıl geliştirebileceğimizi ve sizin için nasıl daha iyi hale getirebileceğimizi bize bildirin. E-posta sitesinde bize yazın