배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
엑셀, 곽승주님의 오튜공구함 제작으로 배워보는 VBA 이야기, Excel

9. 날짜 서식 변경

자료다운로드 : 오튜공구함009.xls 

안녕하세요! 오튜가족 여러분

오늘은 날짜서식을 변경하는 모듈을 만들 차례입니다. 표시형식을 바꾸는 핵심코드는 .NumberFormat 속성입니다. 마이크로소프트 엑셀의 도움말을 살펴보면 다음과 같은 예제코드가 있습니다.
Worksheets("Sheet1").Range("A17").NumberFormat = "일반"
Worksheets("Sheet1").Rows(1).NumberFormat = "hh:mm:ss"
Worksheets("Sheet1").Columns("C"). NumberFormat = "$#,##0.00_);[빨강]($#,##0.00)"

1번째 예제코드는 [셀 서식]대화상자의 [표시 형식]탭에서 "일반"을 선택한 것과 같은 효과를 줍니다. 2번째 예제코드는 시간을 표시하는 예입니다. 3번째 예제코드는 소수점2자리를 가지고 천단위마다 컴마를 찍고 통화표시(달러)를 합니다. 그리고 음수인 경우 빨강색으로 표시하고 괄호안에 표시합니다.

여기에서는 날짜서식을 변경할 것입니다. 날짜 서식을 변경하려면 연도를 의미하는 "Y", 월을 의미하는 "M", 일자를 의미하는 "D"를 사용하여 서식을 만들게 됩니다. 따라서 "YYYY"는 연도를 네자리(1999,2000,2001등등)로 표시하고 "YY"이면 연도의 끝 두자리만 표시하게 됩니다. "MM"이면 두자리 숫자로 월을 표시합니다. "MMM"이면 Jan,Feb,Mar등등 영문약자 세 자리로 월을 표시합니다.

frmDate유저폼코드
Option Explicit

Private Sub InitDateType()
     With lstDateType
          .AddItem "YYYY-MM-DD"
          .AddItem "YYYY-M-D"
          .AddItem "YYYY년 MM월 DD일"
          .AddItem "YYYY년 MM月 DD日"
          .AddItem "YY-MM-DD"
          .AddItem "YY-M-D"
          .AddItem "YY년 MM월 DD일"
          .AddItem "YY년 MM月 DD日"
     End With
End Sub

Private Sub btnCancel_Click()
     Unload Me
End Sub

Private Sub lstDateType_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     Selection.NumberFormat = lstDateType.Text
End Sub

Private Sub UserForm_Initialize()
     InitDateType
End Sub

위의 코드가 전부인데 상당히 간단하죠! 주요 프로시져를 설명드리자면 
Private Sub InitDateType()는 AddItem메소드를 사용하여 목록상자에 날짜서식항목을 추가하는 프로시져입니다. 이러한 프로시져는 Private Sub UserForm_Initialize()에서 사용합니다. 

Private Sub InitDateType()
     With lstDateType
          .AddItem "YYYY-MM-DD"
          .AddItem "YYYY-M-D"
          .AddItem "YYYY년 MM월 DD일"
          .AddItem "YYYY년 MM月 DD日"
          .AddItem "YY-MM-DD"
          .AddItem "YY-M-D"
          .AddItem "YY년 MM월 DD일"
          .AddItem "YY년 MM月 DD日"
     End With
End Sub

Private Sub UserForm_Initialize()는 유저폼이 처음 실행되면서 시작되는 이벤트프로시져입니다. 
Private Sub UserForm_Initialize()
     InitDateType
End Sub

Private Sub lstDateType_DblClick()는 목록상자(상자이름은 lstDateType입니다) 의 항목을 더블 클릭할떄 실행되는 프로시져입니다. 이 프로시져는 이 유저폼의 핵심입니다.
Private Sub lstDateType_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     Selection.NumberFormat = lstDateType.Text
End Sub
프로시져의 내용을 살펴보면 선택한 서식항목(lstDateType.Text)의 텍스트를 현재 선택영역의 NumberFormat속성에 지정하게 됩니다. 

여기에 추가하자면 Private Sub InitDateType()에 자신이 자주 사용하는 여러 가지 서식(날짜서식이 아니더라도 상관없습니다)을 넣어두면 자신이 애용하는 서식을 쉽게 적용할 수 도 있을 겁니다.

오늘은 여기까지입니다. 

목차 | 이전 | 다음