Offset 속성은 기준 셀 또는 범위에서 특정 위치로 이동할 때 사용됩니다.
즉, 현재 위치를 기준으로 지정한 행(row)과 열(column)만큼 이동하여 새로운 범위를 반환합니다.
1. 기본 문법
Range("기준셀").Offset(행 이동, 열 이동)
|
- 행 이동: 양수 → 아래로 이동, 음수 → 위로 이동
- 열 이동: 양수 → 오른쪽으로 이동, 음수 → 왼쪽으로 이동
📌 기준 셀에서 지정한 방향으로 이동 후 해당 위치의 셀 또는 범위를 반환
2. 예제
📌 1칸 아래 이동
Sub Offset_아래_이동()
Range("A1").Offset(1, 0).Select ' A1 → A2 선택
End Sub
|
📌 A1에서 1행 아래(A2)로 이동
📌 2칸 오른쪽 이동
Sub Offset_오른쪽_이동()
Range("A1").Offset(0, 2).Select ' A1 → C1 선택
End Sub
|
📌 A1에서 2열 오른쪽(C1)으로 이동
📌 2칸 위 & 1칸 왼쪽 이동
Sub Offset_위_왼쪽_이동()
Range("C3").Offset(-2, -1).Select ' C3 → B1 선택
End Sub
|
📌 C3에서 2행 위(B1), 1열 왼쪽(B1)으로 이동
3. Offset과 Resize 함께 사용
📌 A1에서 2행 아래, 3열 오른쪽으로 이동 후 2x3 범위 선택
Sub Offset_Resize_활용()
Range("A1").Offset(2, 3).Resize(2, 3).Select ' C4 → E5 선택
End Sub
|
📌 A1에서 C3으로 이동 후, C3:E4 (2x3) 크기 선택
4. Offset을 활용한 동적 데이터 탐색
📌 데이터가 있는 마지막 행 찾기
Sub 마지막_행_찾기()
Dim lastRow As Long
lastRow = Range("A1").End(xlDown).Row
MsgBox "마지막 데이터가 있는 행: " & lastRow
End Sub
|
📌 A1에서 아래 방향(xlDown)으로 이동하여 마지막 행 찾기
📌 마지막 행에서 한 칸 아래로 이동 후 값 입력
Sub 마지막_행_아래_값입력()
Dim lastRow As Long
lastRow = Range("A1").End(xlDown).Row
Range("A1").End(xlDown).Offset(1, 0).Value = "새 데이터"
End Sub
|
📌 마지막 데이터 아래(A1의 마지막 값 바로 아래)에 "새 데이터" 입력
📌 연속된 데이터에서 빈 행 찾기
Sub 빈_행_찾기()
Dim rng As Range
Set rng = Range("A1")
Do While rng.Value <> ""
Set rng = rng.Offset(1, 0) ' 아래 행으로 이동
Loop
rng.Select ' 첫 번째 빈 셀 선택
End Sub
|
📌 A1부터 시작해서 빈 셀을 찾을 때까지 한 줄씩 아래로 이동
📌 범위 내에서 특정 값을 찾아 오른쪽 셀로 이동
Sub 특정값_찾기_이동()
Dim cell As Range
For Each cell In Range("A1:A10")
If cell.Value = "찾을값" Then
cell.Offset(0, 1).Select ' 오른쪽 셀 선택
Exit Sub
End If
Next cell
MsgBox "값을 찾을 수 없습니다."
End Sub
|
📌 A1:A10에서 "찾을값"을 찾으면 오른쪽 셀로 이동
5. Offset을 활용한 데이터 입력
📌 세로로 데이터 입력 (A1부터 A10까지)
Sub 세로_데이터입력()
Dim i As Integer
For i = 0 To 9
Range("A1").Offset(i, 0).Value = i + 1
Next i
End Sub
|
📌 A1부터 A10까지 1~10 입력
📌 가로로 데이터 입력 (A1부터 J1까지)
Sub 가로_데이터입력()
Dim i As Integer
For i = 0 To 9
Range("A1").Offset(0, i).Value = i + 1
Next i
End Sub
|
📌 A1부터 J1까지 1~10 입력
📌 표 형태 데이터 입력 (A1:D5)
Sub 표_데이터입력()
Dim r As Integer, c As Integer
For r = 0 To 4
For c = 0 To 3
Range("A1").Offset(r, c).Value = r + c
Next c
Next r
End Sub
|
📌 A1:D5에 r + c 값 입력
6. Offset을 활용한 데이터 삭제
📌 마지막 행 삭제
Sub 마지막_행_삭제()
Dim lastRow As Long
lastRow = Range("A1").End(xlDown).Row
Range("A1").End(xlDown).Offset(0, 0).EntireRow.Delete
End Sub
|
📌 마지막 행 삭제
📌 데이터가 있는 마지막 열 삭제
Sub 마지막_열_삭제()
Dim lastCol As Long
lastCol = Range("A1").End(xlToRight).Column
Range("A1").End(xlToRight).Offset(0, 0).EntireColumn.Delete
End Sub
|
📌 마지막 열 삭제
📝 정리
기능
|
VBA 코드
|
1칸 아래 이동
|
Range("A1").Offset(1,0).Select
|
2칸 오른쪽 이동
|
Range("A1").Offset(0,2).Select
|
2칸 위 & 1칸 왼쪽 이동
|
Range("C3").Offset(-2,-1).Select
|
Offset과 Resize 함께 사용
|
Range("A1").Offset(2,3).Resize(2,3).Select
|
마지막 행 찾기
|
Range("A1").End(xlDown).Row
|
마지막 행 아래 값 입력
|
Range("A1").End(xlDown).Offset(1,0).Value = "새 데이터"
|
빈 행 찾기
|
Do While rng.Value <> "" : Set rng = rng.Offset(1, 0) : Loop
|
특정 값을 찾아 오른쪽 이동
|
If cell.Value = "찾을값" Then cell.Offset(0,1).Select
|
세로로 데이터 입력
|
For i = 0 To 9 : Range("A1").Offset(i,0).Value = i+1 : Next i
|
가로로 데이터 입력
|
For i = 0 To 9 : Range("A1").Offset(0,i).Value = i+1 : Next i
|
마지막 행 삭제
|
Range("A1").End(xlDown).Offset(0,0).EntireRow.Delete
|
마지막 열 삭제
|
Range("A1").End(xlToRight).Offset(0,0).EntireColumn.Delete
|
🔥 VBA에서 Offset을 사용하면 동적으로 데이터를 조작할 수 있어 자동화에 매우 유용합니다! 🚀