본문 바로가기
공부/기타

[EXCEL VBA] 셀 선택 시 주위 셀들 값 변경하기

by haejang 2020. 11. 10.
728x90
728x90

Alt+F11을 눌러 VBA를 열고 진행할 시트를 선택해준다(나는 sheet1에서 진행)

 

(일반) 메뉴에서 Worksheet, (선언) 메뉴에서 SelectionChange를 선택해준다

 

 

이렇게 Target을 매개변수로 받는 함수가 바로 만들어진다

SelectionChange는 말 그대로 선택한 셀이 변경되었을 때 진행되는 매크로이고, Target은 선택된 셀을 뜻한다

 

결론부터 말하면, 저 안에 아래 코드를 그대로 쓰면 된다

If Target.Cells.count > 1 Then
	Exit Sub
Else
	r = Target.Row
	c = Target.Column
      
	Union(Cells(r,c).Offset(-1,-1).Resize(1,3), Cells(r,c).Offset(1,-1).Resize(1,3), Cells(r,c).Offset(0,-1), Cells(r,c).Offset(0,1)).Select
            
	Selection.Value = 1         
End If

이렇게 하고 VBA를 종료한 후, 아무 셀이나 선택해보면

 

 

선택된 셀 주위로 1이란 값이 들어간 걸 확인할 수 있다

 

<코드 설명>

일단 여러 셀이 한꺼번에 선택된 경우엔 진행하지 않기 위해 if문을 작성한다

Target.Cells.count(선택된 셀의 개수)가 1을 초과하면 해당 매크로를 종료한다

그렇지 않은 경우, Target의 Row와 Column 정보를 r과 c라는 변수로 받는다

 

Union(Cells(r,c).Offset(-1,-1).Resize(1,3)Cells(r,c).Offset(1,-1).Resize(1,3)Cells(r,c).Offset(0,-1)Cells(r,c).Offset(0,1))

파란색부분만 설명해보면 Cells(r,c) 즉 선택된 셀에서 Offset(-1,-1)=위로 한칸 왼쪽으로 한칸 간 다음 Resize(1, 3)=1x3짜리 셀을 선택한다는 뜻이다

그래서 결국 선택된 셀 기준으로 왼쪽 위 대각선, 위, 오른쪽 위 대각선 칸을 선택하게 된다

빨간색은 아래 3칸, 주황색은 왼쪽 1칸, 초록색은 오른쪽 1칸을 뜻하게 되어 이들을 다 합쳐서(Union) 선택(Select)한 다음 Selction의 Value를 1로 설정해주면 주변 8칸이 모두 1로 바뀌게 된다

 

728x90
728x90

댓글