배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   2003
검색어:   중복 데이터
제목:   중복 데이터를 지우는 VBA 코드 (2)
     
 

  엑셀 매크로 또는 엑셀 VBA 는 엑셀사용자라면 언젠가는 도전하고 싶은 목표입니다. 실제 주변에서나 본인의 경험상 엑셀VBA 로 엑셀 작업시간과 노력이 적게 드는 경우를 빈번하게 경험하고 있습니다. 엑셀 VBA로 편리하게 작업할 수 있는 예를 살펴보겠습니다.

  이번 뉴스레터는 이전 뉴스레터와 연결되는 내용으로 테두리를 그리는 VBA 코드를 알아보겠습니다. 아래의 상단 그림과 같이 성별과 부서명이 하나씩만 입력되어 있는 경우에 하단 그림처럼 테두리를 VBA 로 그리려고 합니다. 지면의 제한상 일부 데이터만 예로 든 것이고 실제 데이터는 대량의 데이터입니다.

 
[변경 전]


[변경 후]

 1. 사용되는 명령어들

  엑셀 VBA 작업을 하려면 VBA 명령어에 대해 잘 알고 있어야 합니다.

 - Range : 엑셀에서 셀을 지정할 때 사용하는 명령어. A3셀은 Range(“A3”)이라고 표현합니다.
-  Range(셀, 셀.Offset(0, 3)): 셀부터 셀로부터 행은 동일한 행에서 열만 3열 떨어진 셀까지 범위를 지정합니다.
- IsEmpty : 셀에 데이터가 입력되지 않고 비어있는지 알아봐주는 함수입니다.
- Offset(행, 열) : 지정된 행과 열만큼 이동합니다.
-  Borders : 테두리를 그리라는 명령어로 xlEdgeTop, xlEdgeLeft, xlEdgeBottom,  xlEdgeRight, xlInsideVertical로 테두리가 그려지는 위치를 지정합니다.

 2. 사용되는 VBA 구문

  VBA 문법이라고 생각하시면 됩니다. 일정한 범위를 반복해주는 For구문과 조건에 따라 다른 명령문을 수행하는 If구문을 사용합니다.

For Each 원소 In 집합개념의 범위
      명령어들
Next

  In 다음의 집합개념의 범위에 데이터가 입력된 전체범위를 지정하고 In앞의 원소는 집합의 데이터를 하나씩 지칭합니다. For 와 Next 는 그 사이의 명령어들을 집합내의 데이터를 전부 다루도록 지정하는 역할을 합니다.

If 조건 Then

             참일 경우의 명령문

Else

             거짓일 경우의 명령문

End If

  If 구문은 엑셀의 If 함수와 동일한 역할을 합니다. 조건에 참인 경우와 거짓인 경우에 따라 명령문을 다르게 지정합니다.

 3. 실제 작성한 VBA 코드

  테두리 그리기와 전체 테두리 그리기를 하나로 연결해도 되지만 VBA코드의 이해를 돕기 위해 나누었습니다.

Sub 테두리그리기()
For Each 셀 In Range("A3:A30")
If Not IsEmpty(셀.Value) Then
With Range(셀, 셀.Offset(0, 3)).Borders(xlEdgeTop)
* 3행위에 테두리를 그리기 위해 범위를 A3부터 지정합니다.
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Next
For Each 셀 In Range("B4:B30")
* 성별에서 3행위에 테두리를 그렸으므로 범위를 B4부터 지정합니다.
If Not IsEmpty(셀.Value) Then
With Range(셀, 셀.Offset(0, 2)).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Next
End Sub

Sub 전체테두리그리기()
Set Rng = Range("A2:D30")
With Rng.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Rng.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Rng.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Rng.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Rng.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub