Lost Information!

엑셀 VBA 기초 - union과 intersect 합집합과 교집합 활용하기 - 1편 본문

개인브랜드블로그를 만들어 보자/엑셀VBA

엑셀 VBA 기초 - union과 intersect 합집합과 교집합 활용하기 - 1편

Lostinformation 2020. 11. 16. 13:08

모두가 칼퇴하는 그날까지~

 

지난 글에서는 

엑셀 데이터의 

중복된 데이터를

제거하는 방법을

알려드렸는데요.

 

만일 저번 내용을 모르시거나

기억이 나질 않으신다면

밑에 글을 참고해주세요.

red-s.tistory.com/2444

 

엑셀 VBA 기초 - 중복제거하기

모두가 칼퇴하는 그날까지~ 지난 글에서는 엑셀의 오른 차순과 내림차순을 원하는 만큼 이용하여 매크로로 만드는 방법에 대해 알려드렸는데요. 만일 저번 내용을 모르시거나 기억이 나질 않

red-s.tistory.com

이번 글에서는

엑셀의 교집합과 

합집합을 활용하는 방법

알려드리도록 하겠습니다.

 

우선 매크로는 작성할 때 

사용하는 intersect는 

교집합이라고 하며 

union은 합집합입니다.

 

교집합은 말 그대로 

여러 개의 조건들을

다 부합할 때 사용하기 위한

매크로라고 생각하시면 되고요.

 

합집합은 말 그대로 

여러 개의 조건들 중

한 개라도 부합하는 데이터를

추출하기 위한 매크로라고 

생각하시면 편할 것입니다.

 

그럼 바로 엑셀을 

실행하겠습니다.

 

먼저 위와 같은 데이터가

있다고 가정하고 

시작하겠습니다.

 

그럼 ALT + F11을 눌러

비주얼 베이직 창을 

실행시켜주시고 

 

마우스 오른쪽 버튼과

삽입에 모듈을 눌러주세요.

 

이렇게 창이 나올 수 

있도록 말이죠.

 

그럼 바로 작성 시작할게요.

 

 

이렇게 적어주시면 됩니다.

 

바로 설명 들어가면

 

Sub union_test01()

유니온 테스트 01

이라는 매크로를 만들게


Dim lngE As Long

lngE라는 변수를 설정하고


Dim rngD As Range

lngD라는 변수를 설정하고


Dim i   As Long
i라는 변수를 설정할게

 

lngE = Range("F10000"). End(xlUp). Row

lngE는 F10000부터 위로

올라오면서 마지막행을 찾아

 

For i = 7 To lngE

7부터 마지막행까지

반복 작업하면 되는데

 

If Range("G" & i) = "남" Then

만약 G값이 남이라면

 

If rngD Is Nothing Then

rngD값이 지정되어

있지 않다면

 

Set rngD = Range("G" & i)

rngD는 g값이고

 

Else

아니라면

 

Set rngD = Union(rngD, Range("G" & i))

rngD는 기존의 값과 

새로 나온 데이터 값을

합쳐서 다시 구성해 

 

여기까지 적으시고요.

 

 

위의 매크로로 남자에 

해당하는 데이터를 

모두 찾고 합쳤는데

 

If rngD Is Nothing Then
MsgBox "삭제할 범위가 없어요"

rngD의 값이 없다면

삭제할 범위가 없다는

메시지 박스를 띄우고

 

Else

rngD.EntireRow.Delete

그게 아니라면

rngD의 값을 지워주세요.

 

이렇게 다 적고

실행하면

 

이렇게 남성에 관한

데이터만 지워지고 

여성 데이터만 볼 수 있게 되며

 

한 번 더 실행하게 되면

 

이렇게 메시지 박스가

뜰 수 있도록 설정한 것입니다.

 

처음 알게 된 

union이라서 조금은

헷갈리실 수도 있지만

그만큼 직접 적어보시고 

익숙해지시길 바랍니다.

 

다음 글에서도 이어서 

합집합에 대해 알려드릴게요.

 

여기까지 궁금하신 점은

댓글에 남겨주시고 

공감구독도 부탁드릴게요.

 

 

Comments