출근일이 통합된 출근부에서 개별적으로 출근일을 분리하는 문제이다.
그룹정렬을 해서 풀어도 되고, 출력한 후 본인처럼 사용자 지정 정렬도 풀어도 된다.
그룹으로 정렬하는것은 방법자체에서 많이들 하는 방법이기에 사용자 지정정렬로 풀어보려한다.
혹여나 사용자 지정 정렬이 모르는 분들이 계실것 같아 엑셀 화면을 캡쳐해보았다.
이런식으로 올림차순 / 내림차순을 넘어 내가 원하는 목록으로 정렬하고자 할때 사용된다.
Option Explicit
Sub 출근부정렬()
Dim rngAll As Range: Set rngAll = [a4:b13]
Dim rngA As Range
Dim Vtemp
Dim rngX As Range: Set rngX = [d4]
rngX.CurrentRegion.Offset(1).Clear
For Each rngA In rngAll.Columns(1).Cells
Vtemp = Split(rngA.Next, ",") '= 출근일을 콤마(,) 기준으로 나눠서 Vtemp 에 담아라
rngX.Resize(UBound(Vtemp) + 1, 1) = rngA '= Vtemp는 근무한 횟수만큼 크기가 잡히니 그곳에 근무자 이름을 담아라
rngX.Next.Resize(UBound(Vtemp) + 1, 1) = Application.Transpose(Vtemp) '= 근무일을 담아라
Set rngX = Cells(Rows.Count, "d").End(3)(2) '= 다음근무자는 D열의 마지막 데이터가 채워진 바로 아래에 출력해라
Next rngA
Set rngAll = [d4].CurrentRegion '= 출력된 모든 데이터를 rngAll로 재 설정해라
apply_Sort rngAll '= apply_Sort를 호출해라
End Sub
Function apply_Sort(rngAll As Range)
Dim V: V = Application.Transpose([a3:a13]) '= 헤더 값을 포함하여 사용자 정의 정렬 영역을 선택해라
V = Join(V, ",") '= ★정말 중요하다★
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add2 Key:=rngAll.Columns(1), CustomOrder:="""" & V & """"
.SortFields.Add2 Key:=rngAll.Columns(2)
.SetRange rngAll
.Header = xlYes
.Apply
End With
rngAll.Borders.LineStyle = 2
rngAll.HorizontalAlignment = xlCenter
End Function
코드는 정렬하는 코드이기에 어떻게 하는 지는 코드를 보면 이해할 수 있으리라 본다.
단 , 헤더값을 포함하여 코드를 진행하려면 반드시 key 영역을 헤더값 포함해서 잡아야 한다.
'VBA' 카테고리의 다른 글
[VBA] For Each & Areas 를 이용한 셀 조작하기 (0) | 2022.12.25 |
---|---|
[VBA] 사용자정렬(ArrayList)_feat(평택_호텔관리_딱총) (1) | 2022.12.25 |
[VBA] 다중 Collection으로 단어조합하기 (5) | 2022.12.21 |
[VBA] Find + Intersect를 통해서 원하는값만 출력하기 (0) | 2022.12.15 |
[VBA] 정규식으로 유일값 찾아내기 (0) | 2022.12.15 |
댓글