엑셀관련/vba

[EXCEL/엑셀 VBA]상대 참조로 기록

22rodnjf 2016. 12. 13. 08:58

매크로에 대한 개략적인 설명은 했습니다.

하지만 이렇게 매크로 기록 기능을 이용해서 기록한 매크로는 결국 저장을 한 곳에서만 반복이 이루어 지는대요.

A1셀에서 한 작업을 B4셀에서도 동일하게 하고 싶다면 어떻게 하면 될까요.



개발도구 탭에 가보면 매크로 기록 밑에 상대 참조로 기록 이라는 버튼이 있습니다.



이 버튼을 누를경우 다음과 같이 상대 참조로 기록이 활성화 됩니다.



이후에 간단한 매크로를 하나 작성해 보겠습니다.



짧은 문구를 적어주도록 하구요.

Alt + F11을 눌러서 VBE창을 켜서 코드를 확인해 보겠습니다.



매크로2 코드는 상대 참조기록을 활성화 하지 않고 기록한 매크로 이고

매크로3 코드는 상대 참조기록을 활성화 하고 기록한 매크로 입니다. 차이가 보이시나요?


매크로2의 경우 ActiveCell.FormulaR1C1 = "안녕하세요" 를 통해서

ActiveCell          -> 지금 활성화 되있는 셀의

FormulaR1C1     -> R1C1의 위치에

= "안녕하세요"   -> 안녕하세요 라는 값을 넣어라.


그뒤


Range("A2").Select 를 하라고 되어 있는데

Range("A2") -> A2셀을

Select -> 선택하라.


즉 Range("A2")라는 코드는 항상 A2 셀만을 지목하게 되는 것이죠.

어떤 방법으로 다른 위치를 찍어도 무조건 A2 셀을 선택하도록 만드는 것입니다. 그렇기 때문에 다른 위치를 선택하고 매크로를 실행해도 언제나 A2 셀로 강제로 이동하게 되는 것입니다.



그렇다면 매크로3은 어떨까요.



매크로3의 경우 실행하면 이렇게 작동하는데요.


ActiveCell.FormulaR1C1 = "안녕하세요"

해당 코드는 매크로2와 동일합니다. 현재 활성화 된 셀에 안녕하세요를 입력합니다. 그뒤


ActiveCell.Offset(1, 0).Range("A1").Select


코드에서

AciveCell -> 활성화된 셀의

Offset(1,0) -> 밑으로 1칸 오른쪽으로 0칸 이동한 셀을

Range("A1") -> A1셀로 가정하고

Select -> 선택하라


가 되게 됩니다. 즉 어떤 장소에 있던지 활성화된 셀의 아래쪽 셀을 강제로 선택하게 되는 것이죠.

차이가 확실히 보이시나요?


상대참조로 매크로 기록을 할 경우엔 다른 위치에서도 동일한 작업이 되도록 매크로가 자동으로 작성을 해줍니다.

이 기능을 이용하면 원하는 형태의 매크로를 녹화 해서 코드를 확인하기 훨씬 쉽습니다.