엑셀 VBA에서 Set 문은 객체(Object) 타입의 변수를 할당할 때 사용됩니다.
즉, 워크시트, 범위, 워크북, 차트 등의 객체를 변수에 저장하고 활용할 때 필요합니다.
1. 기본 문법
Set 변수명 = 객체
|
📌 Set을 사용해야 하는 경우:
- Range(셀 범위)
- Worksheet(워크시트)
- Workbook(통합 문서)
- Chart(차트)
- Scripting.Dictionary(딕셔너리)
- Collection(컬렉션) 등
📌 Set을 사용하지 않는 경우:
- 숫자, 문자열, Boolean, 배열 등 기본 데이터 타입
2. 기본 예제
📌 Range 객체 할당
Sub Set_예제1()
Dim rng As Range
Set rng = Range("A1:A5") ' A1:A5 범위를 rng에 저장
rng.Interior.Color = RGB(255, 255, 0) ' 노란색 배경 적용
End Sub
|
📌 Set rng = Range("A1:A5") → A1:A5 범위를 rng 변수에 저장
📌 rng.Interior.Color = RGB(255, 255, 0) → 노란색 배경 적용
📌 Worksheet 객체 할당
Sub Set_예제2()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' Sheet1을 ws 변수에 저장
ws.Range("A1").Value = "Hello, World!" ' A1에 값 입력
End Sub
|
📌 Set ws = ThisWorkbook.Sheets("Sheet1") → Sheet1을 ws 변수에 저장
📌 ws.Range("A1").Value = "Hello, World!" → Sheet1의 A1에 값 입력
📌 Workbook 객체 할당
Sub Set_예제3()
Dim wb As Workbook
Set wb = Workbooks("Sample.xlsx") ' Sample.xlsx 파일을 wb 변수에 저장
wb.Sheets("Sheet1").Range("A1").Value = "데이터 입력"
End Sub
|
📌 Set wb = Workbooks("Sample.xlsx") → 열려 있는 "Sample.xlsx"를 wb 변수에 저장
📌 wb.Sheets("Sheet1").Range("A1").Value = "데이터 입력" → Sheet1의 A1에 데이터 입력
📌 변수를 해제 (Nothing 사용)
Sub Set_해제()
Dim rng As Range
Set rng = Range("A1:A5") ' 범위 할당
rng.Interior.Color = RGB(255, 0, 0) ' 빨간색 배경 적용
Set rng = Nothing ' 객체 해제
End Sub
|
📌 Set rng = Nothing → 객체 변수를 해제하여 메모리에서 제거
3. Set을 활용한 동적 데이터 조작
📌 마지막 데이터가 있는 행 찾기
Sub 마지막_행_찾기()
Dim lastRow As Range
Set lastRow = Range("A1").End(xlDown) ' A1에서 마지막 데이터 행 찾기
lastRow.Interior.Color = RGB(0, 255, 0) ' 초록색 배경 적용
End Sub
|
📌 Set lastRow = Range("A1").End(xlDown) → A1에서 마지막 값이 있는 행을 찾아 저장
📌 lastRow.Interior.Color = RGB(0, 255, 0) → 배경색 초록 적용
📌 빈 행 찾기
Sub 빈행_찾기()
Dim emptyRow As Range
Set emptyRow = Range("A1").End(xlDown).Offset(1, 0) ' 마지막 데이터 아래 행 찾기
emptyRow.Value = "새로운 데이터" ' 데이터 입력
End Sub
|
📌 마지막 데이터 아래 첫 번째 빈 행을 찾아 "새로운 데이터" 입력
4. Set을 활용한 컬렉션 및 딕셔너리
📌 Collection 객체 활용
Sub Collection_예제()
Dim col As Collection
Set col = New Collection ' 컬렉션 객체 생성
col.Add "사과"
col.Add "바나나"
col.Add "오렌지"
MsgBox col(1) ' "사과" 출력
End Sub
|
📌 Set col = New Collection → 새로운 컬렉션 객체 생성
📌 col.Add "사과" → 데이터 추가
📌 MsgBox col(1) → 첫 번째 요소 출력
📌 Dictionary 객체 활용
Sub Dictionary_예제()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary") ' 딕셔너리 생성
dict.Add "Apple", "사과"
dict.Add "Banana", "바나나"
MsgBox dict("Apple") ' "사과" 출력
End Sub
|
📌 Set dict = CreateObject("Scripting.Dictionary") → 딕셔너리 객체 생성
📌 dict.Add "Apple", "사과" → 키-값 추가
📌 MsgBox dict("Apple") → "사과" 출력
5. Set을 활용한 차트 조작
Sub 차트_생성()
Dim ch As ChartObject
Set ch = ActiveSheet.ChartObjects.Add(Left:=50, Top:=50, Width:=400, Height:=300)
With ch.Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=Range("A1:B5")
.HasTitle = True
.ChartTitle.Text = "매출 현황"
End With
End Sub
|
📌 새 차트를 생성하고 A1:B5 데이터를 이용해 막대 그래프를 만듦
📝 정리
기능
|
VBA 코드
|
Range 객체 할당
|
Set rng = Range("A1:A5")
|
Worksheet 객체 할당
|
Set ws = ThisWorkbook.Sheets("Sheet1")
|
Workbook 객체 할당
|
Set wb = Workbooks("Sample.xlsx")
|
Set 해제 (Nothing)
|
Set rng = Nothing
|
마지막 데이터가 있는 행 찾기
|
Set lastRow = Range("A1").End(xlDown)
|
빈 행 찾기
|
Set emptyRow = Range("A1").End(xlDown).Offset(1, 0)
|
컬렉션 객체 사용
|
Set col = New Collection
|
딕셔너리 객체 사용
|
Set dict = CreateObject("Scripting.Dictionary")
|
차트 객체 생성
|
Set ch = ActiveSheet.ChartObjects.Add(...)
|
🔥 VBA에서 Set을 사용하면 객체를 효율적으로 관리할 수 있으며, 데이터 조작과 자동화를 더욱 강력하게 수행할 수 있습니다! 🚀