VB(A)

난수 생성기(로또)

당근쨈 2017. 6. 24. 01:04

http://cafe.naver.com/excelmaster/140186


흔한 난수 생성기(로또)


J1에 0~45 의 숫자를 입력하고 버튼을 누른다.

1. 0을 입력하면 모든 셀에 난수가 출력.

2. 1~45를 입력하면 B열에는 해당 숫자가 고정 출연


Option Explicit
Option Base 1
 
Sub Macro()
 
    Dim IncludeNum As Integer
    Dim v(57As Integer
    Dim i As Integer
    Dim j As Integer
    Dim tmp As Integer
    
    '기존자료 삭제 및 포함되어야할 숫자 선언
    'J1이 0이면 모든 칸이 난수가 출력됩니다.
    Range("B1:H5").ClearContents
    IncludeNum = Range("J1").Value2
    
    For i = 1 To 5
        For j = 1 To 7
        
            Randomize
        
            Do
                'J1에 숫자가 있으면 첫줄은 J1
                If j = 1 Then
                    If IncludeNum > 0 Then
                        v(i, j) = IncludeNum
                        Exit Do
                    End If
                End If
                
                '중복되지 않는 난수 생성
                tmp = Int(46 * Rnd)
                
                If IsUnique(tmp, v) Then
                    v(i, j) = tmp
                    Exit Do
                End If
            Loop
        Next j
    Next i
    
    Range("B1:H5").Value2 = v
    
End Sub
 
Function IsUnique(Num As Integer, Data As Variant) As Boolean
    '중복된 숫자 유무를 판단하는 사용자정의 함수입니다.
    
    Dim iFind As Integer
    Dim i As Integer
    
    On Error Resume Next
    
    With Application
        For i = 1 To 7
            iFind = .Match(Num, .Index(Data, , i), 0)
            If iFind > 0 Then
                IsUnique = False
                Exit Function
            End If
        Next i
    End With
    
    IsUnique = True
    
End Function
 
cs


'VB(A)' 카테고리의 다른 글

[월보용] 데이터 합치기  (0) 2017.09.01
월보 취합 서식  (0) 2017.08.29
[VB.Net] 파일 생성일자로 폴더 생성 후 파일이동  (0) 2017.06.04
[VB.Net] 화면보호기  (0) 2017.06.03
지역별로 시트 생성하여 나누기  (2) 2017.05.16