Lost Information!

엑셀 VBA 기초 - change 이벤트 - 1편 본문

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

엑셀 VBA 기초 - change 이벤트 - 1편

Lostinformation 2020. 10. 28. 19:20

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

 

지난 글에서는 

클릭하면 셀의 색상이

변경되는 매크로를 

만드는 방법에 대해

알려드렸는데요.

 

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

기억이 나질 않으신다면

밑에 글을 참고해주세요.

red-s.tistory.com/2430

 

엑셀 VBA 기초 - 클릭하면 셀이 바뀌는 이벤트 -2편

모두가 칼퇴하는 그날까지~ 지난 글에서는 클릭하면 셀이 바뀌도록 설정하는 방법에 대해 알려드렸는데요. 만일 저번 내용을 모르시거나 기억이 나질 않으신다면 밑에 글을 참고해주세요. red

red-s.tistory.com

이번 글에서는 

CHANGE 이벤트에 대해

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

 

CHANGE 이벤트

특정 셀의 값이 변경되었을 때

원하는 이벤트가 실행되도록

하는 매크로인데요.

 

SelectionChange는 클릭했을 때

Change는 값이 변경되었을 때

라고 생각하시면 편합니다.

 

그럼 엑셀을 켜고 

아래와 같은 표가 있다고 

가정하겠습니다.

 

위의 성별 옆에 

남과 여로 데이터 유효성 검사

통해 구분 지어놨는데요.

 

혹시 모르는 분들을 위해

알려드리면

 

이렇게 설정하시면

남, 여로 데이터를 구분해서

사용할 수 있습니다.

 

이를 활용하여

성별이 변경될 때마다 

아래 표의 해당되는

행의 색상을 변경해보겠습니다.

 

그럼 이제 본격적으로 

시작하기 위해 

ALT + F11 버튼을

눌러주세요~

 

그다음 해당 표가 있는

시트를 더블클릭해주시고

일반을 WorkSheet로 

변경해준 뒤에 

저번과 다르게 Change

변경해주세요~

 

그다음 이렇게 적어주시고

실행하시면 되는데요.

 

바로 설명 들어가겠습니다.

 

아 그전에 데이터가

아닌 객체를 변수로

(셀, 범위, 시트, 도형 등)

지정할 때는

SET 변수명 = 객체

로 지정합니다.

 

Private Sub Worksheet_Change(ByVal Target As Range)

워크시트 안에서 무언가 

변경이 됐을 때 그 타깃을

범위로 받아서 아래 내용을

수행하겠다.

 

Dim strS    As String

스트링 타입의 strS라는

변수를 설정해


Dim rngR    As Range

range 타입의 rngR라는

변수를 설정해


Dim i       As Long

long타입의 i라는

변수를 설정해
        
strS = Target

strS는 타깃이고

 

Set rngR = Range("c7:I20")

rngR은 c7부터 l20까지로

범위를 지정할게         
        
If Intersect(Target, Range("d3")) Is Nothing Then Exit Sub

만약 타깃의 값과 d3의 값이 

모두 참이 아니라면

아무 일도 일어나지 않아
        
For i = 7 To 20

숫자 변수는 7부터 

20까지 움직이는데


If Range("d" & i) = strS Then

d열의 값이 타깃의

값과 같다면


Range("c" & i). Resize(1, 7). Interior.ColorIndex = 6

c행 i열부터 7칸 색상을 노란색으로 변경해

                
End If

 

그리고 실행하게 되면

 

 

이렇게 원하는 곳만

색상이 변경되게 됩니다.

 

하지만 문제가 있죠.

 

바로 다시 남성으로 

변경했을 때 여성으로

선택했을 때 변경되었던

색상이 원래대로 돌아가지

않는다는 건데요.

 

이것에 대해서는

다음 글에 이어서 

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

 

이번 글에서는 평소보다

조금 어려웠을 수도 있는 만큼

꼭 직접 적어보시면서

익히셨으면 좋겠네요~

 

그럼 여기까지 궁금하신 점은

댓글에 남겨주시고 

공감구독 부탁드립니다.

 

 

 

Comments