Filter object
단일 열에 대한 필터를 나타냅니다.
비고
Filter 개체는 Filters 컬렉션의 구성원입니다.Filters 컬렉션에는 자동 필터링된 범위의 필터가 모두 들어 있습니다.
Filter 개체를 하나만 반환하려면 Filters(index)를 사용합니다.여기에서 index는 필터 제목이나 인덱스 번호입니다.
Set w = Worksheets("Sales")
If w.AutoFilterMode Then
filterIsOn = w.autofilter.filters(1).On
Else
End If
Filter 개체의 모든 속성은 읽기 전용입니다. 이러한 속성을 설정하려면 수동으로 자동 필터를 적용하거나 Range 개체의 AutoFilter 메서드를 사용하여 자동 필터를 적용합니다.
[Range 개체] AutoFilter Method - 자동필터
AutoFilter Method 자동 필터를 사용하여 목록을 필터링합니다. 구문은 다음과 같습니다. Syntax expression.AutoFilter (Field, Criteria1, Operator, Criteria2, VisibleDropDown, SubField) Field 필터의 기준이 될 필드의 정수
vbaplayground.tistory.com
속성
Count property
컬렉션에 있는 개체 수를 반환하며 읽기 전용인 Long입니다.
Syntax
expression.Count
expression : Filter 개체를 나타내는 변수입니다.
다음 코드는 필터링이 되어 있는 경우 필드명,필터 기준 ,필터 개수를 출력합니다.
Sub CountFilteredItemsInColumns()
Dim ws As Worksheet
Dim filterRange As Range
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sales")
Set filterRange = ws.AutoFilter.Range
If Not ws.AutoFilterMode Then
MsgBox "No filters applied in the worksheet."
Exit Sub
End If
For i = 1 To filterRange.Columns.Count
If ws.AutoFilter.Filters(i).On Then
PrintFilteredColumnInfo ws, filterRange, i
End If
Next i
End Sub
Sub PrintFilteredColumnInfo(ws As Worksheet, filterRange As Range, columnIndex As Long)
Dim criteria As Variant
Debug.Print "------------------------"
Debug.Print "Filtered Field: " & filterRange.Cells(1, columnIndex).Value
Debug.Print "Number of filtered items: " & ws.AutoFilter.Filters(columnIndex).Count
criteria = ws.AutoFilter.Filters(columnIndex).Criteria1
If IsArray(criteria) Then
Debug.Print "Filter Criteria: " & Join(criteria, ", ")
Else
Debug.Print "Filter Criteria: " & criteria
End If
End Sub
' Output
' ------------------------
' filtered Field: SubCategory
' Number of filtered items: 3
' Filter Criteria: =Bib-Shorts, =Bike Racks, =Bottom Brackets
' ------------------------
' filtered Field: Model
' Number of filtered items: 3
' Filter Criteria: =Hitch Rack - 4-Bike, =HL Bottom Bracket, =LL Bottom Bracket
Criteria1 property
필터링된 범위에서 지정한 열의 첫 번째 필터링된 값을 반환합니다. 읽기 전용인 Variant입니다.
Syntax
expression.Criteria1
expression : Filter 개체를 나타내는 변수입니다.
다음 코드는 시트 이름과 필드 번호를 매개변수로 받아서 필터링된 조건을 출력합니다.
Sub GetFilterCriteria(wsName As String, field As Integer)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(wsName)
If ws.AutoFilterMode Then
With ws.AutoFilter.Filters(field)
If .On Then
' Check if Criteria1 is an array
If IsArray(.Criteria1) Then
Dim i As Integer
' Print all criteria in the array
For i = LBound(.Criteria1) To UBound(.Criteria1)
Debug.Print .Criteria1(i)
Next i
Else
' Print single value criteria
Debug.Print .Criteria1
End If
End If
End With
End If
End Sub
Sub Test()
Call GetFilterCriteria("Sales", 3)
End Sub
' Output
' =AWC Logo Cap
' =Cable Lock
' =Chain
' =Classic Vest, L
Criteria2 property
필터링된 범위에서 지정한 열에 대한 두 번째 필터링된 값을 반환합니다. 읽기 전용인 Variant입니다.
Syntax
expression.Criteria2
expression : Filter 개체를 나타내는 변수입니다.
비고
두 가지 기준을 사용하지 않는 필터의 Criteria2 속성에 액세스하려고 하면 오류가 발생합니다. Criteria2 속성에 액세스하기 전에 Filter 개체의 Operator 속성이 0이 아닌지 확인합니다.
다음 코드는 필터 상태에 따른 메시지를 출력합니다.
Sub GetFilterCriteria2(wsName As String, field As Integer)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(wsName)
If Not ws.AutoFilterMode Then
MsgBox "워크시트에 자동필터가 적용되지 않았습니다."
Exit Sub
End If
With ws.AutoFilter.Filters(field)
If Not .On Then
MsgBox "필드에 필터링이 적용되지 않았습니다."
Exit Sub
Else
Select Case .Operator
Case 0, 7
MsgBox "Criteria2는 AND/OR 연산을 사용합니다."
Case 1, 2
MsgBox .Criteria2
Case Else
MsgBox "필터에서 다른 연산이 사용되었습니다."
End Select
End If
End With
End Sub
Sub Test()
Call GetFilterCriteria2("Sales", 3)
End Sub
On property
True이면 지정한 필터가 사용 중입니다. 읽기 전용인 Boolean입니다.
Syntax
expression.On
expression : Filter 개체를 나타내는 변수입니다.
다음 코드는 필터가 사용되는지 확인하는 간단한 코드입니다.
Sub CheckFilter()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sales")
If ws.AutoFilterMode Then ' 자동필터 모드 확인
With ws.AutoFilter.Filters(1) ' 첫 번째 열의 필터 확인
If .On Then
MsgBox "첫 번째 열에 필터가 적용되었습니다."
Else
MsgBox "첫 번째 열에 필터가 적용되지 않았습니다."
End If
End With
Else
MsgBox "워크시트에 자동필터가 없습니다."
End If
End Sub
다음 코드는 필터된 상태에 따라 상황에 맞는 메시지를 출력합니다.
Function GetFilterCriteria(ws As Worksheet, fieldNum As Integer) As String
Dim c1 As Variant ' Criteria1 값을 저장할 변수
Dim c2 As Variant ' Criteria2 값을 저장할 변수
If ws.AutoFilterMode Then
With ws.autofilter.filters(fieldNum)
If .On Then
' 첫 번째 열의 filter criteria 값을 c1에 저장
c1 = .Criteria1
' AND나 OR 연산자가 사용된 경우 Criteria2도 확인
If .operator = 1 Or .operator = 2 Then
c2 = .Criteria2
End If
Else
GetFilterCriteria = "필터된 상태가 아닙니다."
Exit Function
End If
End With
Else
GetFilterCriteria = "자동 필터 모드가 아닙니다."
Exit Function
End If
' 결과 반환 (배열 형태)
If IsArray(c1) Then
GetFilterCriteria = Join(c1, ", ")
Else
GetFilterCriteria = c1 & IIf(IsEmpty(c2), "", ", " & c2)
End If
End Function
Sub DisplayFilterCriteria()
Dim criteria As String
' 원하는 워크시트 이름과 필드 번호로 변경
criteria = GetFilterCriteria(Worksheets("Sales"), 2)
MsgBox criteria
End Sub
Operator property
지정한 필터에 의해 적용되는 두 가지 조건과 연관된 연산자를 나타내는 XlAutoFilterOperator 값을 반환합니다.
XlAutoFilterOperator enumeration (Excel)
Office VBA reference topic
learn.microsoft.com
Syntax
expression.Operator
expression : Filter 개체를 나타내는 변수입니다.
다음 코드는 필터 상태에 따라 값을 출력합니다.
Function RetrieveFilterOperator(ws As Worksheet, fieldNum As Integer) As Variant
Dim op
If ws.AutoFilterMode Then
With ws.autofilter.filters(fieldNum)
If .On Then
op = .operator
Else
RetrieveFilterOperator = "필터된 상태가 아닙니다."
Exit Function
End If
End With
Else
RetrieveFilterOperator = "자동 필터 모드가 아닙니다."
Exit Function
End If
RetrieveFilterOperator = op
End Function
Sub DisplayFilterCriteria()
Dim criteria As Variant
criteria = RetrieveFilterOperator(Worksheets("Sales"), 1)
MsgBox criteria
End Sub
관련 글
'Worksheet object' 카테고리의 다른 글
Worksheet.Visible 속성 (0) | 2024.02.20 |
---|---|
Filters 개체 (0) | 2023.09.10 |
AutoFilter object (0) | 2023.09.08 |
Worksheet.FilterMode 속성 (0) | 2023.09.08 |
Worksheet.AutoFilterMode 속성 (0) | 2023.09.08 |