この記事では、指定された範囲内の一意の乱数のリストを生成するカスタム関数を作成します。

この例では、「送信」ボタンをクリックしてマクロを実行できます。

マクロを実行する前に、4つのパラメーターの値を入力する必要があります。セルC12に下限値、セルC13に上限値、セルC14に必要な一意のランダム数、セルC15に出力された宛先アドレスが必要です。

ArrowMain

ロジックの説明

一意の乱数のリストを生成する「UniqueRandomNumbers」カスタム関数を作成しました。この関数は、必要な数、下限、および上限を入力パラメーターとして受け取ります。

「UniqueRandomNumbers」カスタム関数を呼び出すための「TestUniqueRandomNumbers」マクロを作成しました。このマクロは、「送信」ボタンをクリックして実行されます。このマクロは、C12からC15の範囲のユーザー入力値を取ります。

ArrowOutput

コードの説明

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]までご連絡ください