출처 : http://abyul.com/
아.. 엑셀2003에는 필터링 하는 도구모음이 있었다.
그 녀석은 참으로 유용한 녀석이었다.
필터된 상태가 아니면, 자동필터된 상태로 만들어 줬고,
특정 셀을 선택하고 클릭하면 선택된 셀의 값으로 필터링을 해줬다.
정말 많이 썼다..
그러다.. 회사에서 엑셀2007을 전부 깔아줬다.. 그 도구모음이 없어졌다.. =_=;;
엑셀2007에 있는 녀석은.. 한번 클릭하면 자동필터 상태로 만들어주지만..
특정 셀을 선택하고 다시 누르면.. 자동필터 상태를 풀어버리기만 했다.. 미친.. =_=;;
할수없이.. Macro로 직접 짜서 쓰기로 했다.
생각보다 삽집을 많이 해서.. 졸 오래 걸렸다. 이틀은 걸린듯.. 머.. 일하다 짬짬이 한거니까.. 4시간쯤.. =_=;;
암튼.. 웃기다..
기본적인 자동필터 매크로는 아래와 같다. 여기서 numField는 사용자 변수다.
Selection.AutoFilter Field:=numField, Criteria1:=Selection.Value
저 numField를 만드는게 살짝 고민됐지만.. 나름 빨리 해결 책을 찾았다.
데이터 영역에서 몇번째 필드인가.. Selection.Column으로 하면 안된다. 데이터 영역에 A열부터 있는게 아니면 어쩔 건가?
암튼.. 연속된 데이터 영역을 지정할 수 있는 CurrentRegion이 있는게 너무나 고마웠다.
'전체 데이터 영역에서 현재 선택 셀의 위치 찾기
numField = Selection.Column - Selection.CurrentRegion.Column + 1
Dim strFilter As String 'On Error GoTo ERROR Set rngCell = Selection.CurrentRegion If rngCell.Count < 2 Then
'선택값이 날짜 형식일 경우의 필터링 ERROR: End Sub |
여담이지만.. 중간에 삽질을 좀 했다.. =_+;;
아래처럼 몇 줄이면 끝날 코딩을.. 저 아래의 코드처럼 산처럼 만들었었었던 것이다. 미친.. =_=;;
겨우.. Selection.Text 하나면 됐을 문제를.. OTL.. 멍청하면 죽어야지..
그래도 이제 알았으니.. 조금 더 살아볼란다.. ㅋㅋ
'전체 데이터 영역에서 현재 선택 셀의 위치 찾기
numField = Selection.Column - rngCell.Column + 1
'선택값이 날짜 형식일 경우의 필터링
If IsDate(Selection.Value) Then
Selection.AutoFilter Field:=numField, Criteria1:=Selection.Value
Else
'선택값이 날짜 형식이 아닐 경우(숫자,텍스트,오류 등)의 필터링
Selection.AutoFilter Field:=numField, Criteria1:=Selection.Text
End If
열라 삽질한 코드의 시작.. =_=;;
'전체 데이터 영역에서 현재 선택 셀의 위치 찾기
numField = Selection.Column - rngCell.Column + 1
'선택영역에 적용된 서식값을 불러옴
formatSelection = Selection.NumberFormatLocal
'선택값이 숫자일 경우의 필터링
If IsNumeric(Selection.Value) Then
If formatSelection = "G/표준" Then
strFilter = Selection.Value
ElseIf IsEmpty(Selection.Value) Then
strFilter = Selection.Value
Else
strFilter = Replace(Replace(Replace(Replace(Format(Selection.Value, formatSelection), "-", ""), "_", ""), "(", ""), ")", "")
End If
Selection.AutoFilter Field:=numField, Criteria1:=strFilter
End
End If
'선택값이 오류일 경우의 필터링
If IsError(Selection) Then
Select Case Selection.Value
Case "오류 2007"
strFilter = "#DIV/0!"
Case "오류 2042"
strFilter = "#N/A"
Case "오류 2029"
strFilter = "#NAME?"
Case "오류 2000"
strFilter = "#NULL!"
Case "오류 2036"
strFilter = "#NUM!"
Case "오류 2023"
strFilter = "#REF!"
Case "오류 2015"
strFilter = "#VALUE!"
End Select
Selection.AutoFilter Field:=numField, Criteria1:=strFilter
End
End If
'숫자, 오류를 제외한 나머지 경우의 필터링
Selection.AutoFilter Field:=numField, Criteria1:=Selection.Value