본문 바로가기
엑셀/VBA

VBA 배우기 기초 - 상대 참조 및 녹화 코드분석

by 큐브빌드 2021. 4. 6.
반응형

서론

 

엑셀에서 VBA를 사용하는 여러 가지 이유가 존재합니다.

 

이번 내용은 단순 반복 작업을 설명하기 위해서입니다.

 

그래서 엑셀의 매크로 녹화를 통해 생성되는 코드를 분석하고 VBA를 하나씩 배워보도록 하겠습니다.

 


본론에 앞서 매크로 녹화와 상대 참조

매크로를 녹화해보겠습니다.

 

보기 → 매크로 메뉴가 있습니다.

그리고 3개의 메뉴가 더 있습니다.

 

메뉴 설명
매크로 보기 사용가능한 매크로가 무엇이 있는지 확인
매크로 기록 녹화 시작
상대 참조로 기록 셀 주소를 어떤식으로 인식할것인지

 

일단 가장 난감한 상대 참조로 기록에 대해서 설명하겠습니다.

 

여기서 가장 중요한 것은

상대 참조로 기록 미사용 : 매크로 사용 위치가 중요하지 않다.

상대 참조로 기록 사용 : 매크로 사용 위치가 중요하다.

한번 보여드리겠습니다. 

 

엄청 미세하게 차이가 납니다. B가 적용 중 이미지입니다.

 

※ 참고로 엑셀 과거 버전은 UI가 다른 걸로 기억합니다... 제가 과거 버전이 없어서 확인을 못하네요...ㅠㅠ

 


상대 참조 설명

위 내용을 설명하기 전 상대 참조부터 먼저 설명하겠습니다.

 

C3의 위치에서 F6으로 우측으로 3칸 , 아래쪽으로 3칸 이동하여 g를 입력하였습니다.

 

매크로를 어디서 사용하건 f6으로 이동하여 g 값을 실행하게 됩니다.

 

위 이미지는 상대 참조를 사용하지 않은 상태입니다. 

 

그러면 상대 참조를 사용했을 때는 어떻게 될까요?

 

c3에서 f6까지 우측으로 3칸 아래쪽으로 3칸 이동하여 g를 입력하였습니다. (위 조건과 동일합니다.)

 

그랬더니 매크로를 실행하는 위치를 기준으로 우측으로 3칸 아래쪽으로 3칸 이동합니다.

 

이게 상대 참조입니다.

 


작업 내용

그러면 간단한 반복 작업의 예시를 보여드리겠습니다.

 

대표적인 예시로 인터넷 웹사이트에서 표를 복사해서 붙여 넣기 하면 자주 발생하는 케이스 중 하나입니다.

 

그림과 같이 1열로 나열된 텍스트를 3개씩 나누어서 정리하는 단순 반복 작업입니다.

 

그러면 작업을 어떻게 할지 생각했습니다.

1. 행과 열을 바꿔야 한다.
2. 3개씩 값을 자른다.
3. 3개 자른 값을 한 줄 아래에 붙여 넣는다.
4. 값이 존재하는 위치로 이동한다.
5. 2 ~ 4번을 반복한다.

잘 이해가 안 되시죠?

 

역시나 이미지로 한번 보시겠습니다.

 

가장 먼저 반복하지 않을 1번부터 처리하겠습니다.

 

참 단축키는 Alt+E 누른 뒤 S입니다.

 

그다음 작업은 이제 반복 작업입니다.

 

 

어라? 그냥 다해버렸습니다..ㅠㅠ

 

근데 규칙은 명확하죠?

1. 3개를 제외하고 나머지 값을 자른다.
2. 한 줄 아래로 내려간다.
3. 붙여 넣는다.
4. 값이 존재하는 가장 앞으로 이동한다.

그럼 여기서 궁금한 부분은 나머지 값 선택은 Ctrl+방향키 우측으로 합니다. 

 

그리고 값이 존재하는 가장 앞으로 이동하는 것은 Ctrl+방향키 좌측으로 합니다.

 

※ 엑셀 시스템, 단축키입니다.

 

그러면 값이 있는 가장 끝으로 이동하게 됩니다.

 

자 그러면 매크로를 녹화해서 해보겠습니다.

 

짜잔 이렇게 성공할 수 있습니다.

 


코드 분석

Alt+F11을 누르면 코드를 확인할 수 있습니다.

그냥 단어를 봐도 어느 정도 알 수 있습니다.

 

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

활성화된 셀을 Offset(0,3) 하고 Range("a1")을 선택인 거죠.

 

Gif 파일과 비교해보면 활성화된 셀에서 오른쪽으로 3칸 이동을 한 것입니다.

 

Range(Selection , Selection.End(xlToRight)). Select

선택되어 있는 것 , 선택되어 있는 것의 끝 오른쪽을 선택하는 것입니다.

 

Gif 파일을 생각해보면 3칸 이동 후 오른쪽 끝까지 이동하였습니다. Ctrl+오른쪽 방향키로요 그 부분입니다.

 

Application.CutCopyMode = False

Selection.Cut

 

여기까지 선택되어 있는 것을 잘라 냈습니다.

 

Selection.End(xlToLeft). select

위에서 마찬가지로 Ctrl+좌측 방향키로 해당 값의 처음으로 이동했습니다.

 

그리고 마찬가지로

 

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

앞서 이야기한 것처럼 활성화된 셀에서 한 칸 아래 내려온 것입니다.

 

그리고

 

ActiveSheet.Paste

 

활성화된 시트에 붙여 넣기를 하였습니다.

 


이렇게 엑셀 VBA를 사용할 수 있습니다.

 

VBA의 최대 단점은 Ctrl+z (되돌리기)가 불가능합니다.

 

이점은 반드시 유의하시기 바랍니다.

 

추후에는 저 모든 것을 입력하는 순간이 올 수 있습니다.

 

저도 저렇게 하나씩 매크로 녹화 기능을 통해서 VBA의 코드 기능을 알게 되었습니다.

 

조금씩 하시다 보면 VBA로 못하는 게 없는 상태가 될 수 있습니다.

 

힘내시고 또 다음에 더 좋은 VBA 설명으로 돌아오겠습니다.

반응형

댓글