rand(life)
방과후학교 수강신청 정리용 VBA 본문
학교홈페이지에서 받은 수강신청 현황을 작업하기 좋게 정리하는 VBA.
이런 상태의 데이터가
이렇게 되게 만드는 방법이다. 반복작업이니 매크로로 기록하고, 몇군데 손만 봐주면 된다. 완성된 VBA 코드는 아래와 같다.
Sub Macro2()
Columns("A:E").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Rows("1:12").Select
Selection.Delete Shift:=xlUp
Columns("K:K").Select
Selection.Delete Shift:=xlToLeft
Range("J1").Select
ActiveCell.FormulaR1C1 = "강좌명"
ActiveSheet.Range("a1").CurrentRegion.Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
ActiveSheet.Range("a1").CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("I1").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("a1").CurrentRegion.AutoFilter Field:=9, Criteria1:="총계"
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.Range("a1").CurrentRegion.AutoFilter Field:=9
Columns("F:I").Select
Range("I1").Activate
Selection.Delete Shift:=xlToLeft
End Sub
위 코드중 다음 부분이 작동은 되지만 좀 의아한 것이.
Selection.AutoFilter
ActiveSheet.Range("a1").CurrentRegion.AutoFilter Field:=9, Criteria1:="총계" <-- 자동필터를 건 다음, "총계"부분만 나오게 필터링
Rows("2:2").Select <-- 2행전체
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp <-- 총계부분을 모두 선택하고 삭제
그런데 실제로는 "총계" 부분이 3행에 있을수도 있고 (1과목만 수강시) 4행에 있을수도(2과목수강시) 있는데
Range(Selection, Selection.End(xlDown)).Select <-- 아래 끝행까지 선택
하여 삭제하는데 실제로는 2행이 삭제되지 않고 "총계"가 있는 부분만 삭제된다는 점이다. 물론, "총계"필터를 걸어둔 상태니까 그런거라는 대답이 돌아올 것 같지만....