본문 바로가기
VBA

[VBA] 로또번호 분석하기

by 일등미노왕국 2022. 6. 20.

지난시간에 번호를 추출하는것을 했다면 이번 시간은 그 번호들을 분석하는 시간을 갖도록 하겠다.

https://1stminokingdom.tistory.com/124

 

[VBA] 로또 번호를 가져오기( feat. 동행복권)

https://www.youtube.com/watch?v=Y0RKhjixSeo&t=35s [윤자동채널]의 다잡님께서 로또관련 분석하는 혜자스런 방법으로 영상을 올려주셨다.. 썸네일만 보았을 때는 1탄에 이어 2탄에서는 어마어마한 퍼포먼스

1stminokingdom.tistory.com

역시나 이번글도 다잡님이 올려주신 영상을 보시고 읽어보시길 바란다.

https://www.youtube.com/watch?v=tirfQpMmVP8 

영상에도 소개했듯이 조건부서식을 통해서 다이나믹한 차트를 구성하였다.

데이터막대 단색 / 그라데이션
프로그레스바 진행률

프로그레스바를 통해서 진행률을 표시하여 진행사항을 단순하지만 효과적으로 표현 하였다...정말 다잡님 코드는 버릴게 없다...ㅋㅋㅋ

 

구문자체는 어렵지 않으나, 이런 생각을 했다는것에 본인과의 레벨수준이 느껴지는 내공이다..

더욱 분발해야겠다.

 

더보기
Option Explicit

Sub Haja_Analysis()

    Dim rngAll As Range
    Dim rngA As Range
    Dim rngX As Range
    Dim rngF As Range
    Dim Lindex&, i&, r&, cnt&
    Dim Lmod&, Lhigh&, Lsum&, LpNum&, Primnum&
    
    [c5:d49,m5:n49].ClearContents               '= 영역초기화
   
    Application.ScreenUpdating = True           '= 진행사항을 보이게 해라
    r = ([d2] + 1 - [b2]) * 6                   '= 총갯수는 (최근값+1 - 시작값) * 6
    
    Set rngAll = Range(Sheets(2).Range("b" & [b2] + 1), Sheets(2).Range("g" & [d2] + 1))
                                                '= 값을 가져올 영역을 시작값과 최근값으로 한다.
    For Each rngA In rngAll.Rows                '= 회차별 순환이기에 전체영역에서 행단위로 순환한다.
       
        For Each rngX In rngA.Cells             '= 행단위 순환에서 각각의 회차의 번호들을 순환해라
            cnt = cnt + 1                       '= 진행되는 숫자들을 카운트해라
            [h2] = cnt / r                      '= 프로그레스바를 진행시키기 위해 카운트한 값들을 / 전체값으로 나눠라
           
           '======================= 번호별 출현 횟수 ======================================
            Sheets(1).[c5].Offset(rngX - 1, 0) = Sheets(1).[c5].Offset(rngX - 1, 0) + 1
           '= 나온 값만큼 offset을 통해 숫자를 카운트 해라
           
           '======================= 홀  짝  여  부  ======================================
            If rngX Mod 2 = 0 Then Lmod = Lmod + 1
           '= 짝수면 Lmod에 담아라
           
           '======================  숫  자  고  저  ======================================
            If rngX > 22 Then Lhigh = Lhigh + 1
           '= 45의 반인 23보다 작으면 저 / 높은면 고 Lhigh에 담아라
           
           '======================  합  계  구  분  ======================================
            Lsum = Lsum + rngX
           '= Lsum에 같은 회차의 출현 번호들을 더해라
           
           '=====================  소  수  구  분   ======================================
            If rngX > 2 And rngX Mod 2 = 1 Then                 '= 2보다 크고 홀수인가
               For i = 3 To rngX                                '= 3부터 회차의 번호까지 순환해라
                    If rngX Mod i = 0 Then LpNum = LpNum + 1    '= 출현값을 i값으로 나눈값이 0이면 lpNum(소수)을 +1해라
                    If LpNum > 1 Then Exit For                  '= 소수가 1이상이면 소수가 아니므로 다음 값을 순환해라
               Next i
                    If LpNum = 1 Then Primnum = Primnum + 1     '= 소수이면 총 소수값에 +1해라
                    
            End If
                    If rngX = 2 Then Primnum = Primnum + 1      '= 2도 소수이므로 총 소수값에 +1 해줘라
                    LpNum = 0                                   '= 개별 번호 소수값 초기화
        Next rngX
       
            Sheets(1).[m5].Offset(Lmod, 0) = Sheets(1).[m5].Offset(Lmod, 0) + 1         '= 홀짝
            Sheets(1).[m16].Offset(Lhigh, 0) = Sheets(1).[m16].Offset(Lhigh, 0) + 1     '= 고저
            Lindex = WorksheetFunction.VLookup(Lsum, [k27:k38], 1, True)                '= Vlookup 유사값
            Set rngF = [k27:l38].Find(Lindex)                                           '= 합계값
            rngF(1, 3) = rngF(1, 3) + 1
           
            [m43].Offset(Primnum) = [m43].Offset(Primnum) + 1                           '= 소수값
            Lmod = 0: Lhigh = 0: Lsum = 0: LpNum = 0: Primnum = 0
           
    Next rngA
            MsgBox "모든 분석이 끝났습니다."

End Sub

여기까지 올 수 있게 도와주신 다잡님께 감사를 드린다.

Haja_lotto.xlsm
0.09MB

댓글