오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

엑셀 VBA 범위 이동 및 확장 매크로 총정리 :: VBA 기초

엑셀 VBA 매크로로 범위를 이동하고 확장하는 방법과 마리오 그림을 출력하기 위한 예제코드를 살펴봅니다.

# VBA

작성자 :
오빠두엑셀
최종 수정일 : 2022. 11. 02. 03:57
URL 복사
메모 남기기 : (5)

엑셀 VBA 범위 이동 확장 및 셀 선택 & 마리오 그림 그리기 :: 엑셀 VBA 강의 3-3

실습파일 무료E-Book 강의 PPT 파일 완성파일
첨부파일에 이상이 생겼을 경우, 1:1 문의하기로 연락주시면 신속히 해결해드리겠습니다. 

1. Range.Offset 속성 이해하기

VBA에서의 Range(범위)개체 Offset 속성은 또 다른 Range(범위) 개체를 출력하는 속성입니다. 선택된 Range를 기준으로 입력한 숫자만큼 아래로 몇 칸 / 오른쪽으로 몇 칸을 이동한 셀을 결과값으로 반환합니다.

Range.Offset(상하이동, 좌우이동)
엑셀 범위 이동 확장 매크로 Range.Offset 예제
엑셀 VBA 매크로 Range.Offset 속성 예제
Sub Offset_Test()
 
Dim Rng As Range
 
'// A1셀을 Rng로 할당합니다.
Set Rng = Range("A1")
 
'// A1셀에서 밑으로 1칸, 우측으로 2칸을 이동한 셀(C2)을 선택합니다.
Rng.Offset(1, 2).Select
 
End Sub

[링크] 마이크로소프트 Range.Offset 속성 설명 바로가기
https://docs.microsoft.com/en-us/office/vba/api/excel.range.offset

2. Range.Resize 함수 이해하기

VBA Range(범위)개체의 Resize 속성은 워크시트에서 사용하는 OFFSET 함수의 선택인수 (3번째, 4번째 인수)와 같은 동작을 합니다. 기준셀에서 입력한 숫자만큼 위아래로 몇 칸, 좌우로 몇 칸 넓힌 범위를 결과값으로 반환합니다. 각 인수는 반드시 1보다 크거나 같아야 합니다. (0이나 음수를 입력하면 오류메세지를 출력합니다.)

Range.Resize(상하확장, 좌우확장)
엑셀 범위 이동 확장 매크로 Range.Resize 예제
엑셀 VBA 매크로 Range.Resize 속성 예제
Sub Resize_Test()
 
Dim Rng As Range
 
'// A1셀을 Rng로 할당합니다.
Set Rng = Range("A1")
 
'// A1셀을 선택합니다.
Rng.Select
 
'// A1셀에서 아래로 5칸, 우측으로 5칸 넓힌 범위를 선택합니다.
'// (A1:E5)
Rng.Resize(5, 5).Select
 
End Sub

[링크] 마이크로소프트 Range.Offset 속성 설명 바로가기
https://docs.microsoft.com/en-us/office/vba/api/excel.range.resize

3. Range.Interior.Color 속성 이해하기

Range(범위) 개체의 Interior.Color는 선택된 범위의 배경색을 칠하는 속성입니다. 배경색을 지정하기 위해 VB기준색상 (vbRed, vbBlue,.. 등) 또는 RGB를 지정하여 이용할 수 있다고 이전강의에서 설명드렸습니다. 자세한 내용은 이전 강의를 참고하세요.

Range.Interior.Color = ColorIndex
Sub BG_Red()
 
Dim WS As Worksheet
Dim Rng As Range
 
'// WS와 Rng를 각각 Sheet1과 Sheet1에 사용자지정범위로 등록된 "하트"로 할당합니다.
Set WS = ThisWorkbook.Worksheets("Sheet1")
Set Rng = WS.Range("하트")
 
'// "하트"의 배경색을 RGB(0,255,0)으로 칠합니다.
Rng.Interior.Color = RGB(0, 255, 0)
 
End Sub

[링크] 마이크로소프트 Range.Interior.Color 속성 설명 바로가기
https://docs.microsoft.com/en-us/office/vba/api/excel.interior.color

4. 기준셀에서 이동/확장 된 범위의 배경색을 입히는 명령문 작성

마리오그림을 그리기 위해서는 5개의 색상(빨강색, 검정색, 파랑색, 갈색, 살색)이 필요합니다. 각각의 기준셀로부터 이동하고/확장된 범위를 원하는 색상으로 편하게 칠하기 위하여 아래와 같이 5개의 보조명령문(Sub-Procedure)를 작성합니다.

'################ 빨강색 ###################
Sub FillRed(Rng As Range, row As Long, col As Long, Optional ExtRow As Long = 1, Optional ExtCol As Long = 1)
 
On Error Resume Next
 
Rng.Offset(row, col).Resize(ExtRow, ExtCol).Interior.Color = vbRed
 
End Sub
 
'################ 검정색 ###################
Sub FillBlack(Rng As Range, row As Long, col As Long, Optional ExtRow As Long = 1, Optional ExtCol As Long = 1)
 
On Error Resume Next
 
Rng.Offset(row, col).Resize(ExtRow, ExtCol).Interior.Color = vbBlack
 
End Sub
 
 
 
 
'################ 살색 ###################
Sub FillSkin(Rng As Range, row As Long, col As Long, Optional ExtRow As Long = 1, Optional ExtCol As Long = 1)
 
On Error Resume Next
 
Rng.Offset(row, col).Resize(ExtRow, ExtCol).Interior.Color = RGB(255, 230, 153)
 
End Sub
 
'################ 갈색 ###################
Sub FillBrown(Rng As Range, row As Long, col As Long, Optional ExtRow As Long = 1, Optional ExtCol As Long = 1)
 
On Error Resume Next
 
Rng.Offset(row, col).Resize(ExtRow, ExtCol).Interior.Color = RGB(198, 89, 17)
 
End Sub
 
'################ 파랑색 ###################
Sub FillBlue(Rng As Range, row As Long, col As Long, Optional ExtRow As Long = 1, Optional ExtCol As Long = 1)
 
On Error Resume Next
 
Rng.Offset(row, col).Resize(ExtRow, ExtCol).Interior.Color = vbBlue
 
End Sub

5. 기준셀에서 마리오 그림을 그리는 명령문 작성

각각의 색깔로 배경색을 칠하는 5개의 보조명령문을 작성하였으면, 지정한 기준셀에서 마리오그림을 그리는 아래의 4개의 명령문을 작성합니다. (Mario_RW는 RightWalking, Mario_RJ는 RightJump를 의미합니다.)

'##################################
'오른쪽 걷는 마리오
'##################################
Sub Mario_RW(Rng As Range)
 
Dim Mario As Range
 
Rng.Activate
 
FillRed Rng, 0, 4, , 4
FillRed Rng, 1, 3, , 8
FillRed Rng, 9, 0
FillRed Rng, 8, 1, 2
FillRed Rng, 7, 2, 4
FillRed Rng, 7, 3, 2
FillRed Rng, 7, 5, 2
FillRed Rng, 7, 6, 2
FillRed Rng, 7, 8, 2
FillRed Rng, 8, 9, 3
FillRed Rng, 8, 10, 2
FillRed Rng, 9, 11
FillRed Rng, 15, 0
FillRed Rng, 14, 1, 2
FillRed Rng, 14, 2, 2
FillRed Rng, 14, 3, 2
FillRed Rng, 14, 8, 2
FillRed Rng, 14, 9, 2
FillRed Rng, 14, 10, 2
FillRed Rng, 14, 11, 2
 
FillBlack Rng, 2, 7, 2
 
FillBrown Rng, 2, 2, , 3
FillBrown Rng, 3, 1, 3
FillBrown Rng, 3, 3, 2
FillBrown Rng, 4, 4
FillBrown Rng, 5, 7, , 3
FillBrown Rng, 4, 8
FillBrown Rng, 5, 2
 
FillSkin Rng, 3, 2, 2
FillSkin Rng, 5, 3, 2
FillSkin Rng, 3, 4
FillSkin Rng, 5, 4, 2
FillSkin Rng, 2, 5, 5
FillSkin Rng, 2, 6, 5
FillSkin Rng, 4, 7
FillSkin Rng, 6, 7
FillSkin Rng, 2, 8, 2
FillSkin Rng, 6, 8
FillSkin Rng, 3, 9, 2
FillSkin Rng, 4, 10
FillSkin Rng, 10, 0, 3
FillSkin Rng, 10, 1, 3
FillSkin Rng, 11, 2
FillSkin Rng, 11, 9
FillSkin Rng, 10, 10, 3
FillSkin Rng, 10, 11, 3
 
FillBlue Rng, 7, 4, 7
FillBlue Rng, 9, 3, 5
FillBlue Rng, 12, 2, 2
FillBlue Rng, 9, 5, 4
FillBlue Rng, 9, 6, 4
FillBlue Rng, 7, 7, 7
FillBlue Rng, 9, 8, 5
FillBlue Rng, 12, 9, 2
 
End Sub
 
'##################################
'오른쪽 점프하는 마리오
'##################################
Sub Mario_RJ(Rng As Range)
 
Dim Mario As Range
 
Rng.Activate
 
FillRed Rng, 0, 6, , 4
FillRed Rng, 1, 5, , 8
FillRed Rng, 2, 12, , 4
FillRed Rng, 3, 12, , 4
FillRed Rng, 4, 13, , 3
FillRed Rng, 5, 12, , 3
FillRed Rng, 6, 12, , 2
FillRed Rng, 7, 11, , 2
FillRed Rng, 7, 7, , 3
FillRed Rng, 8, 8, , 3
FillRed Rng, 7, 1, , 5
FillRed Rng, 8, 0, , 6
FillRed Rng, 9, 1, , 6
FillRed Rng, 10, 5
FillRed Rng, 11, 2, 5
FillRed Rng, 12, 1, 4
FillRed Rng, 13, 0, 3
FillRed Rng, 12, 3
FillRed Rng, 10, 13, 3
FillRed Rng, 8, 14, 5
FillRed Rng, 8, 15, 5
FillRed Rng, 8, 6
 
FillSkin Rng, 3, 4, 2
FillSkin Rng, 5, 5, 2
FillSkin Rng, 5, 6, 2
FillSkin Rng, 3, 6
FillSkin Rng, 2, 7, 5
FillSkin Rng, 2, 8, 5
FillSkin Rng, 4, 9
FillSkin Rng, 6, 9, , 3
FillSkin Rng, 2, 10, 2
FillSkin Rng, 3, 11, 2
FillSkin Rng, 4, 12
FillSkin Rng, 0, 12, , 4
FillSkin Rng, 1, 13, , 3
FillSkin Rng, 9, 0, 3
FillSkin Rng, 10, 1, 2
FillSkin Rng, 10, 2
 
FillBrown Rng, 3, 3, 3
FillBrown Rng, 2, 4, , 3
FillBrown Rng, 3, 5, 2
FillBrown Rng, 4, 6
FillBrown Rng, 5, 4
FillBrown Rng, 2, 11
FillBrown Rng, 4, 10
FillBrown Rng, 5, 9, , 3
 
FillBlue Rng, 7, 6
FillBlue Rng, 10, 3, 2
FillBlue Rng, 13, 3, 3
FillBlue Rng, 10, 4, 6
FillBlue Rng, 11, 5, 5
FillBlue Rng, 10, 6, 5
FillBlue Rng, 8, 7, 7
FillBlue Rng, 9, 8, 6
FillBlue Rng, 9, 9, 5
FillBlue Rng, 7, 10
FillBlue Rng, 9, 10, 5
FillBlue Rng, 8, 11, 5
FillBlue Rng, 8, 12, 5
 
FillBlack Rng, 2, 9, 2
 
End Sub
 
'##################################
'왼쪽 걷는 마리오
'##################################
Sub Mario_LW(Rng As Range)
 
Rng.Activate
 
FillRed Rng, 0, 4, , 4
FillRed Rng, 1, 1, , 8
FillRed Rng, 9, 0
FillRed Rng, 8, 1, 2
FillRed Rng, 8, 2, 3
FillRed Rng, 7, 3, 2
FillRed Rng, 7, 5, 2
FillRed Rng, 7, 6, 2
FillRed Rng, 7, 8, 2
FillRed Rng, 7, 9, 4
FillRed Rng, 8, 10, 2
FillRed Rng, 9, 11
FillRed Rng, 14, 0, 2
FillRed Rng, 14, 1, 2
FillRed Rng, 14, 2, 2
FillRed Rng, 14, 3, 2
FillRed Rng, 14, 8, 2
FillRed Rng, 14, 9, 2
FillRed Rng, 14, 10, 2
FillRed Rng, 15, 11
 
FillSkin Rng, 4, 1
FillSkin Rng, 3, 2, 2
FillSkin Rng, 2, 3, 2
FillSkin Rng, 4, 4, , 3
FillSkin Rng, 3, 5, , 3
FillSkin Rng, 2, 5, , 2
FillSkin Rng, 5, 5, , 4
FillSkin Rng, 6, 3, , 6
FillSkin Rng, 3, 9, 2
FillSkin Rng, 10, 0, 3
FillSkin Rng, 10, 1, 3
FillSkin Rng, 11, 2
FillSkin Rng, 11, 9
FillSkin Rng, 10, 10, 3
FillSkin Rng, 10, 11, 3
 
FillBlue Rng, 12, 2, 2
FillBlue Rng, 9, 3, 5
FillBlue Rng, 7, 4, 7
FillBlue Rng, 9, 5, 4
FillBlue Rng, 9, 6, 4
FillBlue Rng, 7, 7, 7
FillBlue Rng, 9, 8, 5
FillBlue Rng, 12, 9
 
FillBrown Rng, 5, 2, , 3
FillBrown Rng, 4, 3
FillBrown Rng, 2, 7, , 3
FillBrown Rng, 3, 8
FillBrown Rng, 4, 7, , 2
FillBrown Rng, 5, 9
FillBrown Rng, 3, 10, 3
 
FillBlack Rng, 2, 4, 2
 
End Sub
 
'##################################
'왼쪽 점프하는 마리오
'##################################
Sub Mario_LJ(Rng As Range)
 
Rng.Activate
 
FillRed Rng, 0, 6, , 4
FillRed Rng, 1, 3, , 8
FillRed Rng, 2, 0, , 4
FillRed Rng, 3, 0, , 4
FillRed Rng, 4, 0, , 3
FillRed Rng, 5, 1, , 3
FillRed Rng, 6, 2, , 2
FillRed Rng, 7, 3, , 2
FillRed Rng, 8, 0, 5
FillRed Rng, 8, 1, 5
FillRed Rng, 10, 2, 3
FillRed Rng, 8, 5, , 3
FillRed Rng, 7, 6, , 3
FillRed Rng, 7, 10, , 5
FillRed Rng, 8, 9, , 7
FillRed Rng, 9, 9, , 6
FillRed Rng, 10, 10
FillRed Rng, 12, 12
FillRed Rng, 11, 13, 5
FillRed Rng, 12, 14, 4
FillRed Rng, 13, 15, 3
 
FillBlue Rng, 8, 3, 5
FillBlue Rng, 8, 4, 5
FillBlue Rng, 7, 5
FillBlue Rng, 9, 5, 5
FillBlue Rng, 9, 6, 5
FillBlue Rng, 9, 7, 6
FillBlue Rng, 8, 8, 7
FillBlue Rng, 7, 9, 1
FillBlue Rng, 10, 9, 6
FillBlue Rng, 11, 10, 5
FillBlue Rng, 10, 11, 6
FillBlue Rng, 10, 12, 2
FillBlue Rng, 13, 12, 3
 
FillSkin Rng, 0, 0, , 4
FillSkin Rng, 1, 0, , 3
FillSkin Rng, 4, 3, , 2
FillSkin Rng, 3, 4, , 2
FillSkin Rng, 2, 5
FillSkin Rng, 2, 7, , 2
FillSkin Rng, 3, 7, , 3
FillSkin Rng, 4, 6, , 3
FillSkin Rng, 5, 7, , 4
FillSkin Rng, 6, 4, , 6
FillSkin Rng, 3, 11, 2
FillSkin Rng, 9, 15, 3
FillSkin Rng, 10, 14, 2
FillSkin Rng, 10, 13
 
FillBrown Rng, 2, 4
FillBrown Rng, 5, 4, , 3
FillBrown Rng, 4, 5
FillBrown Rng, 2, 9, , 3
FillBrown Rng, 3, 10
FillBrown Rng, 4, 9, , 2
FillBrown Rng, 3, 12, 3
FillBrown Rng, 5, 11
 
FillBlack Rng, 2, 6, 2
 
End Sub

6. 각각의 마리오 그림을 출력하는 명령문 작성

엑셀 범위 이동 확장 매크로 마리로그림 출력
매크로를 실행하면 메세지박스가 출력되면서 시트위에 마리오그림이 각각 그려집니다.

4개의 마리오 그림을 기준셀에서 이동해서 시트위에 출력하는 명령문을 작성합니다. 명령문 작성 후 실행하면 메시지박스가 출력되면서 4개의 마리오그림이 시트위에 각각 그려집니다.

'##################################
'마리오 그림 출력하기 테스트
'##################################
Sub Mario_Print_Test()
 
Dim Rng As Range
 
Set Rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")
 
MsgBox "마리오그림1을 출력합니다."
Mario_RW Rng
 
MsgBox "마리오그림2을 출력합니다."
Mario_LW Rng.Offset(0, 20)
 
MsgBox "마리오그림3을 출력합니다."
Mario_RJ Rng.Offset(0, 40)
 
MsgBox "마리오그림4을 출력합니다."
Mario_LJ Rng.Offset(0, 60)
 
End Sub
댓글 5
5 (2개 평가)
Eunice
Eunice 2020.01.13 19:38
안녕하세요~
오늘 처음 접하고 강의 듣고 있습니다. 재밌고 유익한 강의 감사드려요~ ^^

네개의 마리오를 그리는 각 sub프로그램내에 존재하는 아래 두 문장의 역할이 뭔지 궁금합니다.
없어도 실행은 잘 되던데요. 왜 필요한지요?
게다가 mario라는 변수는 사용되지 않았는데 왜 정의가 필요하지요??
vba는 처음이라.. 자세히 설명 부탁드립니다..

dim mario as range
rng.activate
오빠두엑셀
오빠두엑셀 작성자 2020.01.13 20:18
안녕하세요~^^*
1) mario 변수는 제가 지정해놓고 사용하지 않았었네요... 말씀하신게 맞습니다. mario변수는 없어도 되는 변수입니다.
확인 감사드립니다.^^;;

2) rng.activate
이후 마리오 이동/점프 명령은,활성화된 셀 기준으로 그림이 출력됩니다. 따라서 마리오 그림을 출력할 기준셀을 잡아주는 부분이 되겠습니다.
Eunice
Eunice 2020.01.13 22:16
댓글 추가하기...와우~!! 빠른 답변 감사합니다^^
강민준🤗
강민준🤗 2024.08.09 11:12
좋은 강의 감사합니다🙇‍♂️