출처: http://simon-k.tistory.com/27
이번 예제는 엑셀에 값을 입력할 때 마다 지정한 값에 따라서 셀 색상이 바뀌는 엑셀 매크로입니다.
[엑셀 VBA 강의 #15]에서 강의한 내용을 응용했습니다.
위와 같은 시트에서, 거래금액 란의 금액에 따라 색깔이 자동적으로 바뀌는 매크로를 만들어 보고자 합니다.
Private Sub worksheet_change(ByVal Target As Range)
Dim i As Integer
Dim n As Integer
Dim m As Integer
If Not Intersect(Range("c2:c9"), Target) Is Nothing Then
'----------------------여기부터 범위가 1보다 클 경우
If Target.Count > 1 Then '타겟의 범위가 1보다 크다면(바뀌는 값의 범위가 한개가 아니라면)
n = Target.Row '값을 수정하는 범위의 첫 행 (가장 윗행)
m = n + Target.Count - 1 '값을 수정하는 범위의 마지막 행(첫 행 + 범위 크기 - 1)
For i = n To m '범위의 첫 행부터 마지막 행까지 반복
Select Case Cells(i, 3).Value '셀의 값을 조건으로 한 조건문
Case 0 '값이 0이라면(없다면)
Cells(i, 3).Interior.color = xlNone '셀을 투명하게(초기화)
Case Is < 300000 '값이 300000보다 작다면
Cells(i, 3).Interior.color = RGB(255, 0, 0) 'red 색상으로 변경
Case 300000 To 10000000 '값이 300000과 10000000 사이라면
Cells(i, 3).Interior.color = RGB(0, 255, 0) 'green 색상으로 변경
Case Is > 10000000 '값이 10000000보다 크다면
Cells(i, 3).Interior.color = RGB(0, 0, 255) 'blue 색상으로 변경
End Select
Next i '다음 셀에서 반복
Exit Sub '프로시져 종료
else
End If
'-------------------------여기까지 범위가 1보다 클 경우
'-------------------------여기부터 범위가 1일경우(한개의 셀만 수정할 경우)
Select Case Target
Case 0
Target.Interior.color = xlNone
Case Is < 300000
Target.Interior.color = RGB(255, 0, 0)
Case 300000 To 10000000
Target.Interior.color = RGB(0, 255, 0)
Case Is > 10000000
Target.Interior.color = RGB(0, 0, 255)
End Select
End If
End Sub
※ 이해가 안된다면 [엑셀 VBA #15] 강의를 읽어보세요.
Target의 범위가 무엇을 뜻하는 것인가요?
셀의 값을 수정할 경우, 일반적으로 한 개의 셀을 선택한 후 값을 집어넣지만,
복사 붙혀넣기를 통해 여러 값을 한번에 넣을 수도 있고, 셀을 드래그 블록지정 한 후 삭제를 해서 값을 없앨 수도 있습니다.
이러한 경우 Select Case Target으로 조건문을 만든다면, 타겟의 범위가 넓고, 값이 여러개이기 때문에 에러가 나게 됩니다.
따라서, Range 범위가 1일 경우와 1보다 큰 경우를 따로 설정하여 에러를 방지하기 위함입니다.
범위가 1보다 클 경우 반복문을 사용해 셀을 하나씩 읽어들이는 방법을 사용합니다.
'기타' 카테고리의 다른 글
[엑셀] VBA에서 Text 파일 저장하기 (UTF-8 로 저장하기) (0) | 2016.08.25 |
---|---|
[엑셀] 텍스트파일 import하는 기본코드 (엑셀 VBA 매크로) (0) | 2016.08.25 |
[엑셀] 엑셀 VBA 예제1 텍스트 파일(.txt) 엑셀에 입력하기 (0) | 2016.08.25 |
[엑셀] 엑셀 #N/A안나오게 하는 방법 (0) | 2016.07.29 |
[엑셀] 엑셀 작업영역 제한하기 (0) | 2016.07.27 |