질문 :
필터링할때 값들중에 내가 원하는 값들만 빼고 나머지만 보고 싶은데 코드 어떻게짜면될까?
예를 들어서
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
'엑셀 > 엑셀 VBA' 카테고리의 다른 글
GPT) 필터링 해서 값이 있으면 ~하고 값이 없으면 가만히 있어라 (0) | 2025.04.06 |
---|---|
VBA 다른 엑셀 파일 값 vlookup으로 가져오기 (0) | 2025.04.04 |
ppt 파워포인트 vba (0) | 2024.10.23 |
필터링 된 행 전체 삭제하는 코드 (1) | 2024.09.23 |
Offset이랑 Resize로 머리글 빼고 나머지 선택하기 (0) | 2024.09.13 |