본문으로 바로가기

고급필터 예제

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Sub main_advanced()
    Sheets("filter").Range("a8:d10000").ClearContents
    조건행개수 = getNrow("filter"35)
    Call 고급필터("data""filter", 조건행개수, 5)
    Sheets("filter").Select
End Sub
 
Sub 고급필터(p_데이터시트, p_필터시트, p_조건행개수, p_항목수)
    alphabet항목수 = getColumnAddress(p_항목수)
    데이터행개수 = get행개수(p_데이터시트)
    Sheets(p_데이터시트).Range("A1:" & alphabet항목수 & 데이터행개수).AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Range(p_필터시트 & "!A1:" & alphabet항목수 & p_조건행개수 + 1), _
    CopyToRange:=Range(p_필터시트 & "!A7:" & alphabet항목수 & "7"), Unique:=False
End Sub
 
Function getNrow(p_시트명, p_조건행수, p_열개수)
    result = 0
    For 행번호 = 2 To p_조건행수
        valueExistCount = 0
        For 열번호 = 1 To p_열개수
            If Sheets(p_시트명).Cells(행번호, 열번호).Value <> "" Then
                valueExistCount = valueExistCount + 1
            End If
        Next
        If valueExistCount > 0 Then
            result = result + 1
        End If
    Next
    getNrow = result
End Function
 
Function get행개수(p_시트명)
    Sheets(p_시트명).Select
    get행개수 = Range("a1", Range("a1").End(xlDown)).Rows.Count
End Function
 
Function getColumnAddress(p_columnNumber)
    '몫, 나머지, 서로소
    'module
    Dim q As Integer
    q = p_columnNumber / 26
    r = p_columnNumber Mod 26
    If p_columnNumber <= 26 Then
        getColumnAddress = Chr(p_columnNumber + 64)
    ElseIf p_columnNumber >= 676 Then
    Else
        getColumnAddress = Chr(q + 64& Chr(r + 64)
    End If
End Function
 
cs

end.




댓글을 달아 주세요