[ 매크로 기록하기 ]는 간단한 매크로를 만들 때
자주 사용하는 기능입니다.
[ 매크로 기록하기 ] 아래에 보면
[ 상대 참조로 기록 ]이라는 메뉴가 있습니다.
[ 상대 참조로 기록 ]을 클릭하여 활성화시키고
[ 매크로 기록하기 ]를 누르면
매크로가 상대참조로 기록이 됩니다.
[ 상대 참조로 기록 ]을 클릭하여 활성화시키지 않고
[ 매크로 기록하기 ]를 누르면
매크로가 절대 참조로 기록이 됩니다.
오늘은 매크로 기록하기를 했을 때
절대참조 기록과 상대참조 기록이 무엇인지
그리고 두 방식의 차이가 어떻게 다른 지 알아보겠습니다.
[ 절대참조와 상대참조의 차이 ]
용어는 참 어렵습니다.
적절한 비유가 될지 모르겠지만,
절대 참조와 상대 참조를 비유로 설명하자면
주소를 설명할 때
절대참조로 설명을 하면
[ 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을 입력한 후
아래쪽으로 한칸 이동한 다음
프로그램이 종료됩니다.
참고로 이전 포스팅 글 중 시트 나누기를 포스팅 할 때 상대참조를 사용했었으며
제대로 전달이 되었는지 모르겠습니다.
도움이 되셨기를 바랍니다.
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
'EXCEL VBA' 카테고리의 다른 글
엑셀 VBA로 중복없는 무작위 숫자 생성하기, 중복없는 랜덤 숫자 생성하기 (0) | 2024.01.12 |
---|---|
엑셀 VBA 윤년을 확인하는 사용자 정의함수 만들기 (0) | 2024.01.02 |
엑셀 VBA 체크박스 넣고, 셀 연결 자동으로 하기 (0) | 2023.11.30 |
엑셀 열 너비 자동으로 맞추기, 입력할때마다 열 너비 자동으로 맞추기 (0) | 2023.11.24 |
엑셀 VBA InputBox로 셀 범위 선택하고 값 채우기 (0) | 2023.10.31 |