본문 바로가기

VBA 범위 선택하기 3탄 (Union, Intersect 사용법)

택이형. 2022. 12. 5.

 

Union, Intersect를 활용하면 교집합과 합집합의 범위를 한번에 설정할 수 있어요. 특히 Union의 경우는 앞으로 변수들을 합치는 방법으로도 사용될 예정이니 꼭 완벽숙지하시기 바래요!

 

Union, Intersect를 사용하여 범위선택하기
Union, Intersect를 사용하여 범위선택하기

 

 

오늘을 VBA 범위 선택하기 3탄 Union, Intersect를 사용한 범위지정에 대해 알아보도록 하겠습니다. 1,2탄을 학습하지 않으셨다면 아래 링크를 통해 학습하고 오시면 실력 향상에 도움이 될 것 같아요!

 

 

VBA 범위 선택하기 1탄 (Range)

안녕하세요. 택이형과 회사에서 VBA로 생존하기 택이형입니다. 앞서 VBA를 사용하기 위한 기본적으로 적용하여야 하는 것들과 기초용어에 대해 알아보았는데요. 기초용어를 숙지하신 후 따라오

lst914.tistory.com

 

VBA 범위 선택하기 2탄 (Cells, Offset, Resize 조합)

안녕하세요. 택이형과 회사에서 VBA로 생존하기 택이형입니다. 오늘은 VBA 범위 선택하기 2탄 Cells, Offset, Resize속성을 가지고 범위를 지정해 보도록 할게요. 우선 Range로 범위 설정하기에 대한 학습

lst914.tistory.com


VBA 범위 선택 목차

 

1. VBA 범위 선택하기 1탄 : Range로 범위 선택
2. VBA 범위 선택하기 2탄 : Cells와 Resize, Offset의 조합을 통한 범위 선택
3. VBA 범위 선택하기 3탄 : Union, Intersect을 사용한 범위 선택

4. VBA 범위 선택하기 4탄 : Special cells를 통한 범위 선택
5. VBA 범위 선택하기 5탄 : UsedRange, CurrentRegion, entirerow(column)을 통한 범위 선택
6. VBA 범위 선택하기 6탄 : Areas를 사용한 범위 선택


Union, Intersect을 사용한 범위 선택 방법과 특정 명령이 해당 범위 내에서만 작동하도록 매크로를 만들어 보시죠!

 


Union, Intersect에 대해 알아보자.

Union은 쉽게 합집합(A∪B)의 범위라고 생각하시면 이해가 편하실 것 같아요. 기본 문법은 Union(범위 1, 범위 2) 에요. 예시를 통해 어떻게 작동하는지 한번 보시죠.

 

Union 범위 설정
Union 범위 설정

 

Sub test()

Union(Range("C2:E10"), Range("D7:F14")).Select
' ("C2:E10")범위와 ("D7:F14")범위의 합집합인 ("C2:E10"), ("D7:F14")범위가 모두 선택됨

MsgBox Selection.Address()
' 메시지박스를 통해 선택된 범위 주소를 출력

End Sub

 

메시지 박스를 통해 결과를 확인해 보면 처음 선택한 Range("C2:E10")와 두 번째 선택한 Range("D7:F14") 범위가

모두 잡혀있는 것을 볼 수 있죠.  (Address는 주소를 출력해주는 함수라고 생각하시고 넘어가주세요.^^)

 

 

다음은 Intersect가 어떻게 작동하는지 한번 보시죠. Intersect의 경우는 교집합(A∩B)의 범위라고 생각하시면 좋아요.

기본 문법은 Intersect(범위 1, 범위 2) 에요. 마찬가지로 Intersect가 어떻게 적용되는지 예시로 한번 보시죠.

 

Intersect 범위 설정
Intersect 범위 설정

 

Sub test1()

Intersect(Range("C2:E10"), Range("D7:F14")).Select
' ("C2:E10")범위와 ("D7:F14")범위의 교집합인 ("D7:E10") 범위가 선택됨

MsgBox Selection.Address()
' 메시지박스를 통해 선택된 범위 주소를 출력

End Sub

 

메시지 박스를 통해 확인해 보시면 교집합인 "D7:E10" 범위가 선택되는 것을 볼 수 있어요. 위 두 가지 예시만으로도 Union과 Intersect를 사용하여 필요에 의한 범위 선택을 할 수 있게 되었어요.

 


Union과 Intersect를 사용한 범위 설정

Union으로 설정한 범위로 합계를 구해보자.

Union과 Intersect 사용 예시
Union과 Intersect 사용 예시

 

이번엔 Union과 Intersect를 사용하여 범위를 설정하고 설정된 범위의 계를 출력하는 예시를 가지고 왔어요. 먼저 Union을 사용하여 학생수 계와 여학생 계를 합치는 코드를 한번 보시죠.

 

 

Sub test()

union(Range("C3:C10"), Range("E3:E10")).Select
' union범위를 확인하기 위한 코드에요.
' 실무 적용시에는 이러한 코드는 필요가 없겠죠^^


Range("H3") = WorksheetFunction.Sum(union(Range("C3:C10"), Range("E3:E10")))
' 앞서 배웠던 Sum함수를 사용하여 Union으로 설정된 범위의 합을 H3셀에 뿌리는 코드

End Sub

 

Union 설정 범위
Union 설정 범위

 

노란색 음영 처리된 부분이 Union을 통해 선택한 범위예요. 여기에 Sum을 추가하여 "H3"셀에 뿌리기만 하면 우리가 원하는 결과를 표현할 수 있게 되는 것이죠. 결과는 328명이 "H3"에 출력되는 것을 보실 수 있어요.

 

어떠신가요?? 기존에 학습했던 코드만으로도 나만의 코드를 짤 수 있다는 게 신기하지 않나요? (물론 코드에는 무수히 많은 방법이 존재하기 때문에 정답이란 게 없어요. 다양한 예시로 연습해 보세요.)

 

Intersect로 설정한 범위로 합계를 구해보자.

이번엔 intersect로 범위를 설정하여 1~4반의 남학생 누계 + 여학생 누계의 SUM을 구해볼 차례예요. 잘 따라오세요!

 

Sub test2()

intersect(Columns("D:E"), Range("C3:E6")).Select
' Intersect범위를 확인하기 위한 코드에요.
' 실무 적용시에는 이러한 코드는 필요가 없겠죠^^


Range("H7") = WorksheetFunction.Sum(intersect(Columns("D:E"), Range("C3:E6")))
' 앞서 배웠던 Sum함수를 사용하여 Intersect로 설정된 범위의 합을 H7셀에 뿌리는 코드

End Sub

 

Intersect 범위설정
Intersect 설정 범위

 

columns("D:E")를 통해 D~E 전체 열을 선택하였고, Range("C3:E6") 통해 특정 범위를 선택하였어요. 이를 intersect로 교집합을 구함으로써 최종 범위는 Range("D3:E6")로 설정되는 것을 확인하실 수 있어요. Sum함수를 사용하면 99명이 "H7"에 출력되는 것을 보실 수 있어요.

 

지금까지 Union과 Intersect를 사용한 범위 설정 방법과 활용에 대해 알아보았어요. 한 단계 더 나아가서 우리가 설정한 범위 내에서는 숫자만 입력 가능하도록 설정하는 방법을 알아볼게요.

 


심화)  Intersect와 Target셀을 활용하여 범위 내 숫자만 입력되도록 코딩하기

지금까지 학습된 내용이 토대로 조금 더 심화된 코드를 작성해보고 마치도록 할게요. 힘드시겠지만 조금만 더 따라와 주시면 좋은 결실을 맺으실 거라고 확신합니다! 심화 내용이니 만큼 이해가 가지 않으면 스킵하셔도 괜찮아요!! (나중에 또 다룰 기회가 있기 때문에...)

 

엑셀 예시

 

 

 

이번엔 주황색 음영에 숫자만 기입이 가능하고 문자를 기입할 경우 "숫자를 입력하세요."라는 메시지 박스를 띄워 볼게요.

 

이벤트창에서는 행위선택이 가능해요.
모듈창과 이벤트창의 차이

 

지금까지는 VBA창에서 "모듈"을 사용했었는데요. Target셀의 경우에는 셀의 변화를 반영해야 하기 때문에 "모듈 창"이

아닌 "이벤트 창"을 사용해야 한다는 점 숙지하셔야 해요. 자 그럼! 심화 학습 시작해 보시죠!

Private Sub Worksheet_Change(ByVal Target As Range)

If Not intersect(Target, Columns("C:E")) Is Nothing Then
' Target셀과 Columns("C:E")가 겹친다면

    If Target.Row >= 3 And Target.Row <= 10 Then
      ' Target셀의 Row가 3이상이고 10이하이면

        If IsNumeric(Target) Then
          ' Target셀이 숫자이면 숫자 입력 후 종료

        Else
          ' 그렇지 않으면
            MsgBox "숫자로 입력하세요."
            Target = ""
            Target.Select
              ' 메시지박스로 경고창 출력 후 Target셀 내용 삭제 및 Target셀 선택

        End If
    End If
End If

End Sub

 

먼저 선택한 셀에 값을 입력하기 때문에 selection을 사용하실 수 있을 것이라고 생각하실 텐데요. 이벤트 창에서는 선택된 셀을 Target셀로 정의하기 때문에 Target을 사용하여 표현하셔야 합니다!!  매우 중요해요!!

 

따라서 Intersect를 사용하여 Target셀과 Columns범위의 교집합에 대해 명령을 적용시킨다고 해석하시면 될 거 같아요.

If not intersect(Target, Columns("C:E")) is nothing Then을 살펴보면 is nothing은 ~이 아니면을 의미하는데요. 앞에 not을 사용함으로써 부정의 부정은 긍정의 표현으로 사용되었어요.

 

결국 If not intersect(Target, Columns("C:E")) is nothing Then의 의미는 Target셀과 Columns범위의 교집합이면 다음으로 넘어가겠다는 의미를 담고 있는 것이죠.

 

다음은 행 범위를 제한하기 위해서  If Target.Row >= 3 And Target.Row <= 10 Then을 사용하였는데요. Target셀이 위치한 행이  3보다 크고 10보다 작을 때의 범위를 표현하기 위해 사용되었어요. 또한  If IsNumeric(Target) Then 입력하고자 하는 셀이 0과 문자가 아닌 숫자로만 표현되도록 적용된 함수예요.

 

이렇게 설정해주면 C:E열과 3:10행이 겹치는 부분에 대한 범위는 숫자만 기입이 가능한 매크로가 완성됩니다. 마지막은 숫자가 아닌 값이 들어오면 메시지 박스로 "숫자로 입력하세요."라는 경고창과 함께 Target셀의 내용을 삭제하고 Target셀이 재선택되도록 코딩하였어요. 

 

다시 한번 말씀드리지만 심화 내용은 꼭 이해하실 필요 없이 넘어가셔도 무방합니다. IF에 대해 추후 포스팅되면 IF학습 후 다시 보시면 쉽게 이해하실 내용이기 때문에 지금 스트레스받으실 필요 없어요!!

 

마치며

아직은 VBA에 익숙하지 않을 시점일 거예요. 범위 설정 외에 추가적인 부분은 앞으로 차차 설명해 나갈 예정이니

꼭 지금 이해가 가지 않는다고 하더라도 스트레스받지 말고 기본적인 맥락만 따라와 주시면 좋을 것 같아요. 

익숙해지시면 엑셀에서 함수를 사용하는 것처럼 자연스럽게 느껴지는 날이 올 거예요.^^

 

 

▼▼▼함께 읽으면 좋은 정보▼▼▼

 

VBA 범위 선택하기 6탄! Areas를 사용한 범위 선택!!

UsedRange, CurrentRegion이 연속적인 범위를 설정하는 방법으로 주로 사용되었다면, Areas의 경우는 비연속적인 범위를 설정하는 방법으로 사용됩니다. VBA반복문과 궁합이 잘맞기 때문에 학습해 두시

lst914.tistory.com

 

 

VBA 범위 선택하기 5탄 (UsedRange, CurrentRegion, entirerow)

『 UsedRange, CurrentRegion, entirerow는 연속된 범위를 설정하는 방법으로 유용하게 사용될 수 있어요. 다양한 예시를 통해 학습하시면 VBA실력이 한단계 업그레이드 될거에요. 』 오늘은 VBA 범위 선택

lst914.tistory.com

 

 

VBA 범위 선택하기 4탄 (Specialcells 사용법)

『 Specialcells는 엑셀 VBA에서 약방의 감초같은 역할을 하는데요. 다양한 옵션을 사용할 수 있기때문에 범위선택을 위한 유용한 역할을 하고 있어요. 빈셀이나 수식이 입력된 셀 등 특수한 상황에

lst914.tistory.com

 

 

VBA 범위 선택하기 2탄 (Cells, Offset, Resize 조합)

『 Cells, Offset, Resize를 활용하여 엑셀의 범위를 자유자재로 선택할 수 있어요. 각 속성이 가지는 특징과 예시를 통해 범위선택이 자연스럽게 익혀지도록 연습해 보세요. 』 오늘은 VBA 범위 선택

lst914.tistory.com

 

 

VBA 범위 선택하기 1탄 (Range)

『 VBA를 본격적으로 활용하기 위해서는 적용하고자하는 범위를 선택하는 방법을 알아야 하는데요. VBA에서 자주 사용되는 6가지의 범위선택법을 학습하여 VBA의 기초를 다져볼게요! 』 앞서 VBA를

lst914.tistory.com

 

 

지금 투자하는 시간의 합은 앞으로 나에게 여유로 다가올 시간의 합이다.

댓글