EXCEL VBA

엑셀 VBA에서 두 개의 범위가 겹치는 공통 셀 찾기 : Intersect 함수

카루루1007 2024. 8. 16. 15:53
728x90
반응형

 들어가며

 

INTERSECT() 함수는 Excel VBA에서 두 범위의 공통부분을 반환하는 내장 함수입니다.
이 함수를 사용하면 두 범위가 겹치는 부분(셀)을 쉽게 찾아볼 수 있습니다.

 

 INTERSECT() 함수 구문

 

INTERSECT(range1, range2) : range1과 range2의 공통부분을 반환합니다.

  • range1: 검사할 첫 번째 범위
  • range2: 검사할 두 번째 범위

 

 INTERSECT() 함수의 동작 방식

 

INTERSECT() 함수
두 개의 범위 매개변수를 받아들여
그 부분이 겹치는 셀을 반환합니다.

만약 두 범위가 전혀 겹치지 않는다면, Nothing을 반환합니다.

  • 두 범위의 공통된 셀이 없는 경우: INTERSECT() 함수가 Nothing을 반환합니다.
  • 첫 번째 범위가 두 번째 범위를 포괄하는 경우: INTERSECT() 함수는 첫 번째 범위의 모든 셀을 반환합니다.
  • 두 범위가 일부 셀에서만 겹치는 경우: INTERSECT() 함수는 두 범위에서 공통되는 셀만을 반환합니다.
728x90

 

INTERSECT() 함수 예시

 

다음은 INTERSECT() 함수의 몇 가지 예시입니다.

  1. 겹치지 않는 경우
Sub 예시()
    Dim range1 As Range, range2 As Range

    Set range1 = Sheets("Sheet1").Range("A1:A5")
    Set range2 = Sheets("Sheet1").Range("B6:B10")

    If Intersect(range1, range2) Is Nothing Then
        MsgBox "range1과 range2는 겹치지 않습니다."
    End If
End Sub

위 예시에서는 `range1`(`A1:A5`)과 `range2`(`B6:B10`)가 전혀 겹치지 않으므로 INTERSECT() 함수가 Nothing을 반환합니다. 따라서 메시지 상자가 나타나고 "range1과 range2는 겹치지 않습니다."라는 메시지를 보여줍니다.

  1. 부분적으로 겹치는 경우
Sub 예시()
    Dim range3 As Range, range4 As Range

    Set range3 = Sheets("Sheet1").Range("A1:C5")
    Set range4 = Sheets("Sheet1").Range("B2:D4")

    If Intersect(range3, range4) Is Nothing Then
        MsgBox "range3과 range4는 겹치지 않습니다."
    Else
        MsgBox "range3과 range4의 공통된 셀: " & Intersect(range3, range4).Address
    End If
End Sub

위 예시에서는 `range3`(`A1:C5`)와 `range4`(`B2:D4`)가
일부 셀에서만 겹치므로
INTERSECT() 함수가 두 범위에서
공통되는 셀만을 반환합니다.

따라서 메시지 상자가 나타나고
"range3과 range4의 공통된 셀: B2:D4"라는 메세지를 보여줍니다.

  1. 첫 번째 범위가 두 번째 범위를 포괄하는 경우
Sub 예시()
    Dim range5 As Range, range6 As Range

    Set range5 = Sheets("Sheet1").Range("A1:C5")
    Set range6 = Sheets("Sheet1").Range("B2:D4")

    If Intersect(range5, range6) Is Nothing Then
        MsgBox "range5과 range6는 겹치지 않습니다."
    Else
        MsgBox "range5은 range6을 포괄합니다."
    End If
End Sub

위 예시에서는 `range5`(`A1:C5`)가 `range6`(`B2:D4`)를 포괄하므로
INTERSECT() 함수가 첫 번째 범위의 모든 셀을 반환합니다.
따라서 메시지 상자가 나타나고
"range5은 range6을 포괄합니다."라는 메세지를 보여줍니다.

반응형

 

INTERSECT() 함수 활용 예시

 

INTERSECT() 함수를 사용하면 두 범위가 겹치는지 여부 뿐만 아니라,
공통된 셀의 모음도 쉽게 찾아볼 수 있습니다.

다음은 두 개의 셀이 포함된 Range를 검사하여
그 공통된 셀을 찾아내는 예시입니다

Sub 예시()
    Dim cell1 As Range, cell2 As Range

    Set cell1 = ThisWorkbook.Sheets("Sheet1").Range("A1")
    Set cell2 = ThisWorkbook.Sheets("Sheet1").Range("B3")

    If Intersect(cell1, cell2) Is Nothing Then
      MsgBox "cell1과 cell2는 겹치지 않습니다."
    Else
          MsgBox "cell1과 cell2의 공통된 셀: " & Intersect(cell1, cell2).Address
    End If
End Sub

위 예시에서는 `cell1`(`A1`)와 `cell2`(`B3`)가 전혀 겹치지 않으므로
INTERSECT() 함수가 Nothing을 반환합니다.
따라서 메시지 상자가 나타나고 "cell1과 cell2는 겹치지 않습니다."라는 메시지를 보여줍니다.

아래와 같이 겹치는 셀의 주소를 알려줄 수도 있습니다.

Sub 예시()
    Dim rangeA As Range
    Dim rangeB As Range
    Dim intersection As Range

    Set rangeA = Sheets("Sheet1").Range("A1:B5")
    Set rangeB = Sheets("Sheet1").Range("B4:H9")
    Set intersection = Intersect(rangeA, rangeB)

    If Not intersection Is Nothing Then
        Dim message As String
        message = "범위 " & rangeA.Address & " 와 " & rangeB.Address & " 의 겹치는 셀:" & vbCrLf

        For Each cell In intersection
            message = message & cell.Address & vbCrLf
        Next cell

        MsgBox message, vbInformation
    Else
        MsgBox "범위 'A1:B5' 와 'B4:H9' 는 겹치지 않습니다.", vbInformation
    End If
End Sub

 

마치며

 

INTERSECT() 함수
두 범위의 공통된 셀을 쉽게 찾아볼 수 있는
강력한 도구입니다.

이 함수를 사용하면
코드를 더 간결하고 읽기 쉬운 상태로 만들 수 있습니다.

또한 두 범위가 겹치는지 여부 뿐만 아니라,
공통된 셀의 모음을 찾는 데에도 유용하게 사용할 수 있습니다.

 

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형