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]로 문의 해주세요