데이터 영역을 랜덤화해서 재설정하는 구문이다.
보통 이러한 문제는 랜덤 난수를 추출하여 그것에 따라 정렬하여 재배치 하면 된다.
문제풀이는 이렇다.
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로 텍스트를 조회하여 순수하게 고유값들만 중복없이 재배치하였다.
솔직히 이 코드는 질투날 정도로 이쁘다...
총 맞은거 같다....
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #12 [ Like구문 ] (0) | 2023.01.10 |
---|---|
[기초방] VBA 100제 #11 [ 영역과 조건에 따른 숫자채우기 ] (0) | 2023.01.07 |
[기초방] VBA 100제 #9 [ 데이터 영역 선택하기 ] (0) | 2023.01.05 |
[기초방] VBA 100제 #7 [ 행렬변환 ] (2) | 2023.01.04 |
[기초방] VBA 100제 #8 [ 데이터 영역 선택하기 ] (0) | 2023.01.04 |
댓글