EXCEL VBA

매크로 기록하기, 절대참조 기록하기와 상대참조 기록하기

카루루1007 2023. 12. 5. 23:03
728x90
반응형
SMALL

[ 매크로 기록하기 ]는 간단한 매크로를 만들 때

자주 사용하는 기능입니다.

[ 매크로 기록하기 ] 아래에 보면

[ 상대 참조로 기록 ]이라는 메뉴가 있습니다.

 

[ 상대 참조로 기록 ]을 클릭하여 활성화시키고

[ 매크로 기록하기 ]를 누르면

매크로가 상대참조로 기록이 됩니다.

 

[ 상대 참조로 기록 ]을 클릭하여 활성화시키지 않고

[ 매크로 기록하기 ]를 누르면

매크로가 절대 참조로 기록이 됩니다.

 

오늘은 매크로 기록하기를 했을 때

절대참조 기록상대참조 기록이 무엇인지

그리고 두 방식의 차이가 어떻게 다른 지 알아보겠습니다.  

728x90

[ 절대참조와 상대참조의 차이 ]

 

용어는 참 어렵습니다.

적절한 비유가 될지 모르겠지만,

절대 참조와 상대 참조를 비유로 설명하자면

 

주소를 설명할 때

절대참조로 설명을 하면

[ 000도 00시 00로 xx-xx번지 ]와 같이

해당 주소를 직접 알려주는 것입니다.

이렇게 주소를 알려주면

내가 어디에 있던지

해당 주소는 내 위치와 상관없이 고정된 장소입니다.

 

상대참조로 주소를 설명하면

[ 지금 내 위치에서 오른쪽으로 세 번째에 위치한 집 ]

이런 방식으로 알려주는 것이 상대참조입니다.

 

즉, 절대참조는 현재의 내 상황과 상관없이

해당 위치의 주소를 바로 알려주는 것이고

상대참조는 현재의 내 위치를 기준으로

내 위치에서 얼마나 떨어져 있는지 알려주는 것입니다.  

 

[ 코드 확인 하기 ]

 

매크로를 [ 절대참조로 기록하는 방법 ]은 

[ 개발도구 ] → [ 매크로 기록하기]를 선택하면

아래 그림과 같이 [ 매크로 기록 ] 팝업이 나타납니다.

매크로 이름을 [ 절대참조테스트 ]로 만들고

[ 확인 ]을 누릅니다.

 

 아래 그림과 같이

[ 100, 200, 300 ]을 입력하고

[ 기록 중지 ]를 눌러줍니다.

 

다음은 [ 상대참조로 기록하는 방법 ]입니다.

[ 개발도구 ] → [ 상대 참조로 기록 ] 클릭하여 활성화 → [ 매크로 기록 ]을

누른 후

매크로 이름은 [ 상대참조테스트 ]로 정하고

절대참조로 기록했을 때와 같은 행위를 반복합니다.

 

이제 절대참조로 기록했을 때와

상대참조로 기록을 했을 때

소스코드가 어떻게 다른지 살펴보겠습니다.

Sub 절대참조테스트()
'
' 절대참조테스트 매크로
'

'
    ActiveCell.FormulaR1C1 = "100"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "200"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "300"
    Range("C4").Select
End Sub
Sub 상대참조테스트()
'
' 상대참조테스트 매크로
'

'
    ActiveCell.FormulaR1C1 = "100"
    ActiveCell.Offset(1, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "200"
    ActiveCell.Offset(1, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "300"
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

위 코드는 [ 절대참조 기록 ]이고 

아래 코드는 [ 상대참조 기록 ]입니다.

 

코드의 차이가 보이시나요?

두 코드는 모두 6줄의 코드로 작성되어 있습니다.

 

홀수번째 줄은 모두 같으나,

짝수번째 줄은 두 코드의 모양이 다릅니다.

 

홀수번째줄의 소스코드는 

[ 선택된 셀에 100, 200, 300을 입력하라 ]라는 의미입니다.

 

짝수번째 줄이 절대참조와 상대참조 기록을 비교할 수 있는 코드입니다.

 

절대참조로 매크로 기록을 했을 경우에는

선택된 셀에 100 입력 이후

[ B2 ] 셀을 선택합니다.

그리고 선택된 셀(B2셀)에 200을 입력합니다.

그다음 [ C3 ] 셀을 선택합니다.

그리고 선택된 셀(C3) 셀에 300을 입력합니다.

그리고 [ C4 ] 셀을 선택합니다.

※ [ C4 ] 셀이 선택된 이유는 [ C3 ] 셀에 값을 입력 후 엔터를 쳤기 때문입니다.

 

상대참조로 매크로 기록을 했을 경우에는

똑같이 선택된 셀에 100 입력 이후

offset(1, 1)을 실행해 아래쪽으로 한 칸, 오른쪽으로 한칸 이동한 다음

그 셀을 선택합니다.

그리고 선택된 셀에 200을 선택합니다.

다시  offset(1, 1)을 실행해 아래쪽으로 한칸, 오른쪽으로 한칸 이동한 다음

그 셀을 선택합니다.

그리고 선택된 셀에 300을 입력합니다.

그다음 offset(1, 0)을 실행해 아래쪽으로으로 한 칸 이동한 다음

그 셀을 선택합니다.

 

코드가 실행되는 모습을 보시면서

위에 설명을 같이 보시면 바로 이해가 되실 겁니다.

 

[ 코드 실행 모습 ]

 

절대참조로 기록된 매크로를 실행하는 모습입니다.

[ D7 ] 셀을 선택 후 매크로를 실행하니 

[ D7 ]셀 즉 선택한 셀에 100을 입력 후

[ B2 ] 셀에 200, [ B3 ]셀에 300을 입력한 후 

최종적으로 [ C4 ] 셀을 선택하고 매크로가 종료됩니다.   

반응형

 

 

다음은 상대참조로 기록된 매크로를 실행하는 모습입니다.

[ D7 ]셀을 선택 후 매크로를 실행하니 

[ D7 ]셀 즉 선택한 셀에 100을 입력 후

아래쪽으로 한 칸, 오른쪽으로 한칸 이동 후

200을 입력하고

다시 아래쪽으로 한칸, 오른쪽으로 한칸 이동 후

300을 입력한 후

아래쪽으로 한칸 이동한 다음

프로그램이 종료됩니다.

 

참고로 이전 포스팅 글 중 시트 나누기를 포스팅 할 때 상대참조를 사용했었으며

여기를 참고하시면 됩니다.

 

제대로 전달이 되었는지 모르겠습니다.

도움이 되셨기를 바랍니다.

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

엑셀 공부하기
VBA 공부하기

728x90
반응형
LIST