VBA Function

Randomize 및 Rnd 함수

노만e 2025. 3. 15. 05:22

엑셀 VBA에서 Randomize와 Rnd 함수는 무작위(Random) 숫자를 생성할 때 사용됩니다.

  • Rnd0 이상 1 미만의 난수(실수)를 생성 (0 ≤ Rnd < 1)
  • Randomize난수 생성기의 시드를 초기화 (랜덤 값을 다르게 생성)

1. 기본 문법

Randomize ' 난수 시드 초기화 (선택 사항)
결과 = Rnd

📌 Rnd는 기본적으로 0 이상 1 미만의 난수를 반환

📌 Randomize를 사용하면 실행할 때마다 다른 난수를 생성

📌 Randomize 없이 실행하면 매번 동일한 난수 패턴을 생성


2. 0 이상 1 미만의 난수 생성

Sub 기본랜덤()
Dim 난수 As Double
난수 = Rnd
MsgBox "생성된 난수: " & 난수
End Sub

📌 Rnd는 0.000000 ~ 0.999999999 범위의 실수를 반환


3. 특정 범위(1~10) 내 랜덤 정수 생성

Sub 랜덤정수_1to10()
Dim 난수 As Integer
Randomize
난수 = Int(10 * Rnd) + 1 ' 1~10 사이의 정수
MsgBox "1~10 사이의 랜덤 숫자: " & 난수
End Sub

📌 Int(10 * Rnd) + 1 → 1부터 10까지의 정수 생성


4. 특정 범위(A~B) 내 랜덤 정수 생성

Function 랜덤숫자(A As Integer, B As Integer) As Integer
Randomize
랜덤숫자 = Int((B - A + 1) * Rnd) + A
End Function
Sub 랜덤_범위_사용()
Dim 결과 As Integer
결과 = 랜덤숫자(50, 100) ' 50~100 사이의 숫자
MsgBox "랜덤 숫자 (50~100): " & 결과
End Sub

📌 Int((B - A + 1) * Rnd) + A → A~B 범위 내 정수 생성


5. Randomize 없이 실행 시 랜덤값 확인

Sub 랜덤_시드_없음()
Dim i As Integer
For i = 1 To 5
Debug.Print Rnd ' 항상 같은 난수 패턴 출력
Next i
End Sub

📌 Randomize 없이 실행하면 매번 동일한 난수 패턴 출력


6. Randomize를 사용하여 실행할 때마다 다른 난수 생성

Sub 랜덤_시드_적용()
Dim i As Integer
Randomize
For i = 1 To 5
Debug.Print Rnd ' 실행할 때마다 다른 난수 패턴 출력
Next i
End Sub

📌 Randomize를 사용하면 실행할 때마다 다른 난수를 생성


7. 랜덤 배열 생성 (Array 활용)

Sub 랜덤배열()
Dim i As Integer
Dim 랜덤값(1 To 5) As Integer

Randomize
For i = 1 To 5
랜덤값(i) = Int(100 * Rnd) + 1 ' 1~100 사이의 숫자
Debug.Print "배열 요소 " & i & ": " & 랜덤값(i)
Next i
End Sub

📌 1~100 사이의 랜덤 숫자를 배열에 저장하여 출력


8. 중복 없는 랜덤 숫자 리스트 생성

Sub 중복없는랜덤()
Dim i As Integer, j As Integer, temp As Integer
Dim 숫자리스트(1 To 10) As Integer

' 1~10까지 숫자 저장
For i = 1 To 10
숫자리스트(i) = i
Next i

' 랜덤 섞기 (Fisher-Yates Shuffle 알고리즘)
Randomize
For i = 10 To 2 Step -1
j = Int(i * Rnd) + 1
temp = 숫자리스트(i)
숫자리스트(i) = 숫자리스트(j)
숫자리스트(j) = temp
Next i

' 결과 출력
For i = 1 To 10
Debug.Print 숫자리스트(i)
Next i
End Sub

📌 1~10 사이의 숫자를 랜덤하게 섞어 중복 없는 리스트 생성


9. 랜덤 날짜 생성

Sub 랜덤날짜()
Dim 시작일 As Date, 종료일 As Date, 랜덤날짜 As Date
시작일 = DateSerial(2024, 1, 1)
종료일 = DateSerial(2024, 12, 31)
Randomize
랜덤날짜 = 시작일 + Int((종료일 - 시작일 + 1) * Rnd)

MsgBox "랜덤 날짜: " & 랜덤날짜
End Sub

📌 2024년 1월 1일부터 2024년 12월 31일 사이의 랜덤 날짜 생성


10. 랜덤 문자(알파벳) 생성

Function 랜덤알파벳() As String
Dim 문자코드 As Integer
Randomize
문자코드 = Int(26 * Rnd) + 65 ' A~Z (ASCII 65~90)
랜덤알파벳 = Chr(문자코드)
End Function
Sub 랜덤문자테스트()
MsgBox "랜덤 알파벳: " & 랜덤알파벳()
End Sub

📌 A~Z 중 하나의 랜덤 알파벳 생성


📌 Randomize & Rnd 사용 시 주의할 점

  1. Rnd는 0 이상 1 미만의 실수만 반환
  2. vba
  3. Debug.Print Rnd ' 출력 예시: 0.273841, 0.987654
  4. 랜덤 정수를 얻으려면 Int(최대값 * Rnd) + 최소값을 사용
  5. vba
  6. Debug.Print Int(10 * Rnd) + 1 ' 1~10 사이 정수 반환
  7. Randomize를 사용하지 않으면 같은 난수 패턴이 반복됨
  8. vba
  9. Debug.Print Rnd ' 실행할 때마다 동일한 패턴 출력 가능
  10. Randomize는 실행할 때마다 다른 난수를 생성하도록 설정
  11. vba
  12. Randomize Debug.Print Rnd ' 실행할 때마다 다른 값 생성

📝 정리

기능
VBA 코드 (RndRandomize 활용)
0~1 사이 난수 생성
Rnd
1~10 사이 정수 생성
Int(10 * Rnd) + 1
A~B 범위 내 랜덤 정수
Int((B - A + 1) * Rnd) + A
랜덤 날짜 생성
시작일 + Int((종료일 - 시작일 + 1) * Rnd)
랜덤 알파벳 생성
Chr(Int(26 * Rnd) + 65)
중복 없는 랜덤 숫자 리스트
Fisher-Yates 알고리즘 사용

🔥 VBA의 Randomize와 Rnd를 활용하면 난수 생성 및 무작위 데이터 처리가 가능합니다! 🚀