이 기사에서는 지정된 범위 사이의 고유 및 난수 목록을 생성하는 사용자 지정 함수를 만듭니다.

이 예에서는 “제출”버튼을 클릭하여 매크로를 실행할 수 있습니다.

매크로를 실행하기 전에 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]로 문의 해주세요