Skip to content

Instantly share code, notes, and snippets.

@Kyeongrok
Last active August 27, 2017 06:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kyeongrok/b932e1ec90c8d264d5931a82ac2f33ca to your computer and use it in GitHub Desktop.
Save Kyeongrok/b932e1ec90c8d264d5931a82ac2f33ca to your computer and use it in GitHub Desktop.
excel vba advanced filter
Sub advancedFilter()
    'jdpps
    Sheets("filter").Range("a7:z10000").ClearFormats
    db시트명 = Range("filter!b5").Value
    
    'db시트명 입력 안했으면 메세지(validation)
    If db시트명 = "" Then MsgBox ("fliter!b5 에 db시트명을 입력해주세요")
    
    '데이터 범위 구하기
    열개수 = Sheets(db시트명).Range("a1", Sheets(db시트명).Range("a1").End(xlToRight)).Columns.Count
    행개수 = Sheets(db시트명).Range("a1", Sheets(db시트명).Range("a1").End(xlDown)).Rows.Count
    열주소 = Chr(64 + 열개수)
    데이터범위 = "a1:" & 열주소 & 행개수
    
    '조건범위 구하기
    조건행개수 = 조건행개수구하기(3, 열개수)
    Sheets(db시트명).Range(데이터범위).advancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("filter!A1:" & 열주소 & 1 + 조건행개수), CopyToRange:=Range("filter!A6:" & 열주소 & "6"), Unique:=False
End Sub

Function 조건행개수구하기(p_최대조건줄수, p_조건열개수)
    조건범위 = 0
    
    열의데이터개수 = 0
    For  = 2 To p_최대조건줄수
        For  = 1 To p_조건열개수
            'Sheets("filter").Cells(행, 열).Select
            If Sheets("filter").Cells(행, 열).Value <> "" Then
                열의데이터개수 = 열의데이터개수 + 1
            End If
        Next
        
        If 열의데이터개수 > 0 Then
            조건범위 = 조건범위 + 1
        End If
        열의데이터개수 = 0
    Next
    
    조건행개수구하기 = 조건범위
End Function

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment