단일 입력 상자를 사용하여 단일 열의 여러 필터 입력에 대한 VBA 코드

단일 입력 상자를 사용하여 단일 열의 여러 필터 입력에 대한 VBA 코드

매크로(다중 데이터)를 사용하여 Excel을 필터링해야 합니다.

여기에 이미지 설명을 입력하세요

나는 "등급 열"(이미지 참조)을 A, B 및 C로 필터링하는 것을 좋아합니다(그러나 이러한 A,B 및 C는 제한되지 않으며 때로는 "B 및 C" 등급 데이터만 필요함). & 나는 이러한 항목을 입력하고 싶습니다. 입력 상자를 사용하여 필터 등급.

누구든지 코드에 대해 도움을 줄 수 있습니까?

"A+B+C" 또는 "AB C"로 입력할 수 있으면 큰 도움이 됩니다.

다음은 공백으로 구분된 샘플 데이터입니다.

Name class Grade
Liam 1 A
Noah 2 b
William 3 c
James 1 d
Olive 2 e
Benjamin 3 f
Elijah 1 A
Lucas 2 b
Mason 3 c
Logan 1 d
Alexander 2 e
Ethan 3 f
Jacob 1 A
Michael 2 b
Daniel 3 c
Henry 1 d
Jackson 2 e
Sebastian 3 f
Aiden 1 A
Emma 2 b
Olivia 3 c
Ava 1 d
Isabella 2 e

답변1

귀하의 질문을 이해하면 자동 필터 드롭다운을 사용하여 데이터를 필터링하고 싶지 않으실 것입니다. 대신 항목 목록을 InputBox에 입력한 다음 해당 항목의 데이터를 필터링하려고 합니다.

다음 코드를 사용하면 됩니다.

Sub FilterListUsingInputBox()
    
    Dim sep As String
    Dim filter As String
    Dim filters() As String
    
    sep = " "
    
    filter = InputBox("Enter a list of 1-n filter items, separated by a space")
    
    If filter = "" Then 'no filter was entered
        Exit Sub
    End If
    
    filters = Split(filter, sep)
    
    Sheet1.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=filters, Operator:=xlFilterValues
End Sub

여기서 주목해야 할 중요한 점은 먼저 입력을 배열로 분할한 다음 이를 지정하는 동안 메서드 Split()에 전달해야 한다는 것입니다 .Range.AutoFilterOperator:=xlFilterValues

이는 다음을 가정합니다.

  1. 데이터가 A1 셀을 포함하는 범위에 있습니다. 그렇지 않은 경우 절차의 마지막 줄을 변경하십시오.
  2. 귀하의 데이터는 Sheet1에 있습니다. 그렇지 않은 경우 절차의 마지막 줄을 변경하십시오.
  3. 목록 항목을 구분하기 위해 공백을 사용하려고 합니다. 그렇지 않은 경우 해당 줄을 sep = " "다른 것으로 변경하십시오.

관련 정보