본문으로 바로가기

고급필터 예제

category Excel VBA/VBA 예제 2017.04.03 11:29
고급필터 예제


1
2
3
4
5
6
7
8
Sub advancedFilter(db시트명, filter시트명)
    filter시트columns = Sheets(filter시트명).Range("a1").CurrentRegion.Columns.Count
    filter_column_name_addr = Sheets(filter시트명).Range(Sheets(filter시트명).Cells(81), Sheets(filter시트명).Cells(8, filter시트columns)).Address
        
    Sheets(db시트명).Range("A1").CurrentRegion.advancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets(filter시트명).Range("A1").CurrentRegion, CopyToRange:=Range( _
        filter시트명 & "!" & filter_column_name_addr), Unique:=False
End Sub
cs

위 예제는 컬럼명 주소를 필터 시트가 어떤것인지에 따라 동적으로 바꿔준다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub main_advanced()
    Call advancedFilter
End Sub
Sub advancedFilter()
    끝열주소 = get컬럼주소(get가로개수("filter"))
    Sheets("filter").Range("a9:" & 끝열주소 & "10000").ClearFormats
    Sheets("raw_data").Range("A1").CurrentRegion.advancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("filter").Range("A1").CurrentRegion, CopyToRange:=Range("A8:" & 끝열주소 & "8"), Unique:=False
End Sub
 
Function get컬럼주소(p_colno)
    get컬럼주소 = Split(Cells(, p_colno).Address, "$")(1)
End Function
 
Function get가로개수(p_시트명)
    columnCount = Sheets(p_시트명).Range("A1").CurrentRegion.Columns.Count
    get가로개수 = columnCount
End Function
cs


위 예제는 컬럼 개수 세는 기능을 function으로 분리한 고급필터 예제이다.


end.




댓글을 달아 주세요