엑셀 VBA에서 SelectionChange 이벤트는 사용자가 워크시트에서 셀을 선택(클릭 또는 이동)할 때 실행되는 이벤트입니다.
즉, 셀을 선택할 때마다 특정 동작을 자동으로 실행할 수 있습니다.
1. 기본 문법
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' 실행할 코드
End Sub
|
매개변수
|
설명
|
Target
|
사용자가 선택한 셀 범위 (Range 개체)
|
📌 이 코드는 특정 워크시트(Sheet1, Sheet2 등)의 코드 모듈에 작성해야 함
📌 셀을 클릭하거나 이동할 때마다 실행됨
2. 셀을 선택할 때 메시지 표시
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "선택한 셀: " & Target.Address
End Sub
|
📌 사용자가 셀을 선택하면 해당 셀 주소를 메시지로 표시
3. 특정 셀 선택 시 메시지 표시
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2" Then
MsgBox "B2 셀이 선택되었습니다!"
End If
End Sub
|
📌 사용자가 B2 셀을 선택할 때만 메시지 표시
4. 특정 범위 선택 시 배경색 변경
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Target.Interior.Color = RGB(255, 255, 0) ' 노란색
End If
End Sub
|
📌 A1:A10 범위 내의 셀을 선택하면 해당 셀의 배경색을 노란색으로 변경
5. 특정 범위 외의 선택을 막기
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("C1:D10")) Is Nothing Then
MsgBox "C1:D10 범위만 선택 가능합니다!"
Application.Undo
End If
End Sub
|
📌 C1:D10 범위 외의 셀을 선택하면 메시지를 표시하고 원래 상태로 복구
6. 선택한 셀의 값이 특정 조건을 충족하면 강조
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value > 100 Then
Target.Font.Bold = True
Target.Font.Color = RGB(255, 0, 0) ' 빨간색
Else
Target.Font.Bold = False
Target.Font.Color = RGB(0, 0, 0) ' 검정색
End If
End Sub
|
📌 선택한 셀의 값이 100보다 크면 글씨를 빨간색 & 굵게 표시
7. 선택한 셀의 행 숨기기
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$E$5" Then
Rows(5).Hidden = True
End If
End Sub
|
📌 E5 셀을 선택하면 5번째 행을 자동으로 숨김
8. 선택한 셀의 행 전체를 강조
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone ' 모든 셀 배경색 초기화
Rows(Target.Row).Interior.Color = RGB(200, 230, 255) ' 선택한 행을 파란색으로 강조
End Sub
|
📌 선택한 셀의 행 전체를 밝은 파란색으로 강조하고, 이전 색상은 초기화
9. 선택한 셀의 열 전체를 강조
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlNone ' 모든 셀 배경색 초기화
Columns(Target.Column).Interior.Color = RGB(255, 230, 200) ' 선택한 열을 주황색으로 강조
End Sub
|
📌 선택한 셀의 열 전체를 밝은 주황색으로 강조하고, 이전 색상은 초기화
10. 마우스로 이동하면 특정 셀에 현재 시간 입력
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("G1").Value = Now
End Sub
|
📌 사용자가 셀을 이동할 때마다 G1 셀에 현재 시간을 입력
11. 선택한 셀의 값 음성 출력
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If IsNumeric(Target.Value) Then
Application.Speech.Speak "선택한 값은 " & Target.Value
End If
End Sub
|
📌 사용자가 숫자가 포함된 셀을 선택하면 값을 음성으로 읽어줌
12. 특정 열만 선택 가능하도록 제한
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 2 Then ' B열(2번째 열) 외 선택 방지
MsgBox "B열만 선택할 수 있습니다!"
Application.Undo
End If
End Sub
|
📌 B열(2번째 열)만 선택할 수 있도록 제한
13. 이전 선택한 셀을 저장하고 강조
Dim 이전셀 As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not 이전셀 Is Nothing Then
이전셀.Interior.ColorIndex = xlNone ' 이전 선택한 셀 색상 초기화
End If
Target.Interior.Color = RGB(255, 255, 153) ' 선택한 셀을 밝은 노란색으로 강조
Set 이전셀 = Target
End Sub
|
📌 이전 선택한 셀의 색상을 복구하고, 현재 선택한 셀을 강조
14. 특정 값이 입력된 셀을 클릭하면 자동으로 링크 열기
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value = "Google" Then
ActiveWorkbook.FollowHyperlink "https://www.google.com"
End If
End Sub
|
📌 "Google"이 입력된 셀을 클릭하면 자동으로 웹사이트 열기
15. 선택한 셀의 행 번호 및 열 번호 출력
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "선택한 셀의 행: " & Target.Row & vbNewLine & "선택한 셀의 열: " & Target.Column
End Sub
|
📌 사용자가 셀을 선택하면 해당 셀의 행과 열 번호를 표시
📌 SelectionChange 사용 시 주의할 점
- 셀을 이동할 때마다 실행되므로 성능 저하 가능성
- 너무 무거운 작업을 실행하면 엑셀 속도가 느려질 수 있음
- Application.ScreenUpdating = False를 활용하여 최적화 가능
- 다른 이벤트(Change, Calculate 등)와 혼용할 때 주의해야 함
- 셀 이동이 제한될 경우(Undo 사용 시)
- 사용자의 자연스러운 워크플로우를 방해할 수 있음 (주의 필요)
📝 정리
기능
|
VBA 코드 (SelectionChange 이벤트)
|
선택한 셀 주소 표시
|
MsgBox Target.Address
|
특정 셀 선택 시 메시지 표시
|
If Target.Address = "$B$2" Then MsgBox "B2 선택됨"
|
특정 범위 선택 시 색상 변경
|
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then Target.Interior.Color = RGB(255,255,0)
|
특정 범위 외 선택 제한
|
If Intersect(Target, Range("C1:D10")) Is Nothing Then Application.Undo
|
선택한 셀의 행/열 강조
|
Rows(Target.Row).Interior.Color = RGB(200,230,255)
|
선택한 셀 값 음성 출력
|
Application.Speech.Speak Target.Value
|
🔥 VBA의 SelectionChange 이벤트를 활용하면 엑셀에서 실시간 반응형 기능을 추가할 수 있습니다! 🚀