본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #10 [ 데이터 영역 재설정하기 ]

by 일등미노왕국 2023. 1. 6.

데이터 영역을 랜덤화해서 재설정하는 구문이다.

 

보통 이러한 문제는 랜덤 난수를 추출하여 그것에 따라 정렬하여 재배치 하면 된다.

 

문제풀이는 이렇다.

1. 난수를 발생

2. 난수와 기존값을 조합하여 임시 영역에 추출

3. 정렬

4. 난수와 기존값 분리

5. 기존값을 새로운 위치에 추출

6. 난수와 기존값을 출력한 영역 삭제

 

 

더보기
Option Explicit
Sub 기초방10_1()
    Dim bln As Boolean
    Dim rngall As Range
    Dim i&
    
    Application.ScreenUpdating = False
        
        For i = 1 To 2                                      '= 문제에 따른 영역 재 설정
            If bln = False Then
               Set rngall = [c5:c14]
            Else
               Set rngall = [e21:k27].SpecialCells(2)
            End If
        
            문제풀이 rngall, bln
        Next i
        
    Application.ScreenUpdating = True
    
End Sub
Function 문제풀이(rngall As Range, bln As Boolean)
    
    Dim rngA As Range
    Dim rngX As Range: Set rngX = [w1]
    Dim C&: C = 3

    Randomize
    For Each rngA In rngall
        
        Cells(Rows.Count, "w").End(3)(2) = Rnd & "/" & rngA   '= 랜덤값 / 엑사남 조합을 W 열에 값을 던짐
    
    Next rngA
       
        [w2].CurrentRegion.Sort [w2], 1                       '= 랜덤값 정렬
    
    If bln = True Then C = 10
    
        For Each rngA In rngall
        
            Set rngX = rngX.Offset(1)
            rngA.Offset(, C) = Split(rngX, "/")(1)            '= 결과 값에 랜덤값 부분을 제외한 값을 출력
        
        Next rngA

    Columns("w").Delete                                       '= W 열 삭제
    
    bln = Not bln
End Function

 

그런데 같은 방 크루 딱총님은 정말 감도 못잡을 만큼 멋진 코드를 선보여서 소개하려고 한다.

코드 멋지지 않는가?

배열에 값을 하나씩 넣듯, check라는 Sting변수에 하나씩 엮어서 Instr로 텍스트를 조회하여  순수하게 고유값들만 중복없이 재배치하였다. 

 

솔직히 이 코드는 질투날 정도로 이쁘다...

 

총 맞은거 같다....

 

기초방_10.xlsm
0.02MB

댓글