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

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

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

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

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

관련강의 살펴보기

글을 발견하지 못했습니다.

관련 기초내용 포스트 | by 오빠두엑셀

글을 발견하지 못했습니다.

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
매크로 셀 배경색 칠하기 썸네일
엑셀 VBA 셀 배경색 칠하는 매크로 알아보기 :: VBA 기초
실습파일 무료E-Book 강의 PPT 파일 완성파일 첨부파일에 이상이 생겼을 경우, 1:1 문의하기로 연락주시면 신속히 해결해드리겠습니다.  관련강의 살펴보기 관련 기초내용 포스트 | ...
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 1 vote
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
3 Comments
Inline Feedbacks
View all comments
Eunice
Eunice
2020년 1월 13일 7:38 오후
게시글평점 :
     

안녕하세요~ 오늘 처음 접하고 강의 듣고 있습니다. 재밌고 유익한 강의 감사드려요~ ^^ 네개의 마리오를 그리는 각 sub프로그램내에 존재하는 아래 두 문장의 역할이 뭔지 궁금합니다. 없어도 실행은 잘 되던데요. 왜 필요한지요?… 더보기 »

Eunice
Eunice
2020년 1월 13일 10:16 오후

댓글 추가하기...와우~!! 빠른 답변 감사합니다^^

3
0
여러분의 생각을 댓글로 남겨주세요.x