Microsoft ExcelでVBAを使用してユニークな乱数のリストを生成
この記事では、指定された範囲内の一意の乱数のリストを生成するカスタム関数を作成します。
この例では、「送信」ボタンをクリックしてマクロを実行できます。
マクロを実行する前に、4つのパラメーターの値を入力する必要があります。セルC12に下限値、セルC13に上限値、セルC14に必要な一意のランダム数、セルC15に出力された宛先アドレスが必要です。
ロジックの説明
一意の乱数のリストを生成する「UniqueRandomNumbers」カスタム関数を作成しました。この関数は、必要な数、下限、および上限を入力パラメーターとして受け取ります。
「UniqueRandomNumbers」カスタム関数を呼び出すための「TestUniqueRandomNumbers」マクロを作成しました。このマクロは、「送信」ボタンをクリックして実行されます。このマクロは、C12からC15の範囲のユーザー入力値を取ります。
コードの説明
i = CLng(Rnd()*(ULimit-LLimit)+ LLimit)
上記の式は、定義された上限と下限の間の乱数を作成するために使用されます。 Rnd()関数は、0から1までの乱数を作成します。
Range(Selection、Selection.Offset(Counter -1、0))。Value = _ Application.Transpose(RandomNumberList)
上記のコードは、配列の出力を転置し、指定された宛先に出力を割り当てるために使用されます。
コードについては以下に従ってください
Option Explicit Function UniqueRandomNumbers(NumCount As Long, LLimit As Long, ULimit As Long) As Variant 'Declaring variables Dim RandColl As Collection Dim i As Long Dim varTemp() As Long 'Validation check for the value specified by the user If NumCount < 1 Then UniqueRandomNumbers = "Number of unique random number required is less than 1" Exit Function End If If LLimit > ULimit Then UniqueRandomNumbers = "Specified lower limit is greater than specified upper limit" Exit Function End If If NumCount > (ULimit - LLimit + 1) Then UniqueRandomNumbers = "Number of required unique random number is greater than maximum number of unique number that can exists between lower limit and upper limit" Exit Function End If 'Creating new object of collection Set RandColl = New Collection Randomize Do On Error Resume Next 'Calculating the random number that exists between the lower and upper limit i = CLng(Rnd() * (ULimit - LLimit) + LLimit) 'Inserting the unique random number in the collection RandColl.Add i, CStr(i) On Error GoTo 0 'Looping until collection have items equal to numCount Loop Until RandColl.Count = NumCount ReDim varTemp(1 To NumCount) 'Assigning value of the items in the collection to varTemp array For i = 1 To NumCount varTemp(i) = RandColl(i) Next i UniqueRandomNumbers = varTemp Set RandColl = Nothing Erase varTemp End Function Sub TestUniqueRandomNumbers() 'Declare variables Dim RandomNumberList As Variant Dim Counter As Long, LowerLimit As Long, UpperLimit As Long Dim Address As String 'Getting the values input by the user Counter = Range("C14").Value LowerLimit = Range("C12").Value UpperLimit = Range("C13").Value Address = Range("C15").Value 'Calling custom function UniqueRandomNumbers RandomNumberList = UniqueRandomNumbers(Counter, LowerLimit, UpperLimit) 'Selecting the destination Range(Address).Select 'Assigning the value in the destination Range(Selection, Selection.Offset(Counter - 1, 0)).Value = _ Application.Transpose(RandomNumberList) End Sub
このブログが気に入ったら、FacebookやFacebookで友達と共有してください。
皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください