본문 바로가기
VBA

[VBA] Find + Intersect를 통해서 원하는값만 출력하기

by 일등미노왕국 2022. 12. 15.

원하는 값을 포함하는 영역만 따로 출력하는 문제이다.

 

여기서 핵심은

Intersect를 통해서 교집합 영역을 추출하는것이다.

 

이것만 이해하면 본인의 코드를 충분히 이해할 수 있을 것이다.

포기하지 않은 자들이여...신의 가호가...

 

 

 

더보기
Option Explicit

Sub Find_Num()

    Dim rngAll As Range: Set rngAll = [b5:g18]                  '= 전체영역
    Dim rngF As Range                                           '= Find 셀을 담을 영역
    Dim rngAdrss$, n&, i&
    Dim Vall(1 To 100)                                          '= 임의의 크기의 배열을 설정
    Dim rngX As Range: Set rngX = [i5]
    
     With rngAll
        Set rngF = .Find(What:=7, Lookat:=xlWhole)              '= 전체 영역에서 숫자 7을 찾아라
               
        If Not rngF Is Nothing Then                             '= 숫자 7이 있다면
            rngAdrss = rngF.Address                             '= 해당 주소를 rngAdrdss 에 담아라
           
            Do
            n = n + 1                                           '= 7이 포함된 행을 담기 위한 배열 상수
           
                Vall(n) = Intersect(rngF.EntireRow, rngAll)     '= 7이 포함된 전체행과 전체영역의 교집합을 Vall에 담아라
                Set rngF = .FindNext(rngF)                      '= 다음 찾은 영역을 rngF에 담아라

            Loop While Not rngF Is Nothing And rngF.Address <> rngAdrss   '= 더 찾을 값이 없거나 처음 위치까지 돌아오지 않을때까지 Do
        End If
    End With
    
   
    For i = 1 To n                                              '= 임의 배열 Vall에 실제 크기를 카운팅한 n 만큼 순환
        rngX.Resize(1, 6) = Vall(i)                             '= 출력 영역에 Vall 중첩 배열을 출력
        Set rngX = rngX.Offset(1)                               '= 다음 영역으로 이동
    Next i

    [i5].CurrentRegion.Borders.LineStyle = 2                    '= 영역 대상으로 테두리 설정
    
End Sub

7포함행만 남기기.xlsm
0.02MB

댓글