rand(life)

방과후학교 수강신청 정리용 VBA 본문

컴퓨터/엑셀

방과후학교 수강신청 정리용 VBA

flogsta 2013. 7. 2. 13:22

학교홈페이지에서 받은 수강신청 현황을 작업하기 좋게 정리하는 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과목수강시) 있는데 

Rows("2:2").Select <-- 2행전체선택

    Range(Selection, Selection.End(xlDown)).Select <-- 아래 끝행까지 선택

하여 삭제하는데 실제로는 2행이 삭제되지 않고 "총계"가 있는 부분만 삭제된다는 점이다. 물론, "총계"필터를 걸어둔 상태니까 그런거라는 대답이 돌아올 것 같지만....