Wygeneruj listę unikalnych liczb losowych za pomocą VBA w programie Microsoft Excel

Spisie treści

W tym artykule stworzymy niestandardową funkcję do generowania listy liczb unikalnych i losowych pomiędzy określonymi zakresami.

W tym przykładzie możemy uruchomić makro, klikając przycisk „Prześlij”. Przed uruchomieniem makra musimy wprowadzić wartości dla czterech parametrów. Podaliśmy wartość dolnej granicy w komórce C12, górną granicę w komórce C13, liczbę unikalnych losowych wymaganych w komórce C14 i adres docelowy, w którym wymagane jest wyjście w komórce C15.

Wyjaśnienie logiczne

Stworzyliśmy niestandardową funkcję „UniqueRandomNumbers” do generowania listy liczb unikalnych i losowych. Ta funkcja pobiera wymaganą liczbę, dolny limit i górny limit jako parametry wejściowe.

Stworzyliśmy makro „TestUniqueRandomNumbers”, aby wywołać funkcję niestandardową „UniqueRandomNumbers”. To makro jest wykonywane przez kliknięcie przycisku „Prześlij”. To makro pobiera wartość wejściową użytkownika z zakresu C12 do C15.

Wyjaśnienie kodu

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

Powyższy wzór służy do tworzenia liczby losowej pomiędzy zdefiniowaną górną i dolną granicą. Funkcja Rnd() tworzy liczbę losową z zakresu od 0 do 1.

Zakres(Wybór, Wybór.Przesunięcie(Licznik - 1, 0)).Value = _

Application.Transpose (Lista NumerówLosowych)

Powyższy kod służy do transpozycji danych wyjściowych tablicy i przypisania danych wyjściowych do określonego miejsca docelowego.

Proszę postępować zgodnie z poniższym kodem!

 Option Explicit Function UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Deklarowanie zmiennych Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Sprawdzenie poprawności dla wartości określonej przez użytkownika If NumCount ULimit Then UniqueRandomNumbers = "Określony dolny limit jest większy niż określony górny limit" Zakończ funkcję End If If NumCount > (ULimit - LLimit + 1) Then UniqueRandomNumbers = "Liczba wymaganych unikalnych liczb losowych jest większa niż maksymalna liczba unikalnych liczb, które mogą istnieć między dolnymi limit and upper limit" Exit Function End If 'Tworzenie nowego obiektu kolekcji Set RandColl = New Collection Randomize Do On Error Resume Next 'Obliczanie liczby losowej między dolną a górną granicą i = CLng(Rnd() * (ULimit - LLimit) + LLimit) 'Wstawianie unikatowej liczby losowej w kolekcji RandColl.Add i, CStr(i) On Error GoTo 0 'Pętla, aż kolekcja ma elementy równe numCount Pętla do RandColl.Count = Num Count ReDim varTemp(1 To NumCount) 'Przypisywanie wartości elementów w kolekcji do tablicy varTemp For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Erase varTemp End Function Sub TestUniqueRandomNumbers () 'Zadeklaruj zmienne Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Pobieranie wartości wprowadzonych przez użytkownika Counter = Range("C14").Value LowerLimit = Range("C12" ).Value UpperLimit = Range("C13").Value Address = Range("C15").Value 'Wywołanie funkcji niestandardowej UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Wybieranie docelowego zakresu(Adres).Wybierz 'Przypisywanie wartość w docelowym Range(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub 

Jeśli podobał Ci się ten blog, podziel się nim ze znajomymi na Facebooku. Możesz również śledzić nas na Twitterze i Facebooku.

Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy poprawić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave