본문 바로가기
엑셀/엑셀 VBA

GPT) 필터링할때 내가 원하는 값들만 빼고 나머지만 보고 싶음

by 한국수달보호협회장 2025. 4. 6.

 

 

 

질문 :

필터링할때 값들중에 내가 원하는 값들만 빼고 나머지만 보고 싶은데 코드 어떻게짜면될까?

예를 들어서
sheet1 과일목록에 딸기,사과,포도가 있음(A1~A4)
sheet2 과일목록에 포도 수박 메론 딸기 체리 키위 파인애플(A1~A8) sheet1에 과일목록에있는 리스트들에 포함되지 않는 애들만 sheet2 과일목록에 필터링 시키게 하는거야

여기서 주의할점 sheet2에는 사과는없음
 
 
 

<sheet1>

 

 

<sheet2>

>

 

 

Sub FilterNotInList()

    Dim wsList As Worksheet
    Dim wsData As Worksheet
    Dim lastRowList As Long
    Dim lastRowData As Long
    Dim dict As Object
    Dim cell As Range
    Dim i As Long

    Set wsList = ThisWorkbook.Sheets("Sheet1") ' 기준 과일 리스트
    Set wsData = ThisWorkbook.Sheets("Sheet2") ' 전체 과일 목록

    Set dict = CreateObject("Scripting.Dictionary")

    ' 기준 과일 목록을 딕셔너리에 저장
    lastRowList = wsList.Cells(wsList.Rows.Count, "A").End(xlUp).Row
    For Each cell In wsList.Range("A1:A" & lastRowList)
        If Trim(cell.Value) <> "" Then
            dict(Trim(cell.Value)) = True
        End If
    Next cell

    ' 기존 필터 해제
    If wsData.AutoFilterMode Then wsData.AutoFilterMode = False

    ' 전체 과일 목록 필터링 설정
    lastRowData = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row

    ' 도우미 열 삽입 (B열에 TRUE/FALSE 표시)
    For i = 2 To lastRowData
        If dict.exists(Trim(wsData.Cells(i, 1).Value)) Then
            wsData.Cells(i, 2).Value = "IN"
        Else
            wsData.Cells(i, 2).Value = "OUT"
        End If
    Next i

    ' 헤더 추가
    wsData.Cells(1, 2).Value = "Check"

    ' B열 기준으로 "OUT"만 필터링
    wsData.Range("A1:B" & lastRowData).AutoFilter Field:=2, Criteria1:="OUT"

End Sub