vba (79)
레이의 VBA정복기7- 숫자를 영어로 변환하는 방법
반응형
지난 글 '레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법'에서 엑셀 함수 'NUMBERSTRING'를 이용하면 될 것을 굳이 VBA코드로 작업한 이유로 '다음에 올릴 예정인 포스트와 연관되어 있습니다'라고 밝혔습니다.

인터넷 검색을 통해서 알아본 결과, 숫자를 한글 또는 한자로 변환하는 방법을 많이 얻을 수 있습니다(이곳에 가시면 NUMBERSTRING함수 이외에 다양한 방법이 있음). 그러나 숫자를 영어로 변환하는 방법에 대한 검색 결과는 VBA코드를 이용하는 방법외에는 없었습니다.
이런 이유로 '레이의 VBA정복기6'를 올리게 된 것 입니다.

좌우지간, 엑셀에서 숫자를 영어로 전환하는 VBA코드을 아래와 같이 올립니다.
아래의 코드를 '레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법'에 설명된 방법대로 설정하시면 됩니다.

Option Explicit
 'Main Function
 Function SpellNumber(ByVal MyNumber)
     Dim Dollars, Cents, Temp
     Dim DecimalPlace, Count
     ReDim Place(9) As String
     Place(2) = " Thousand "
     Place(3) = " Million "
     Place(4) = " Billion "
     Place(5) = " Trillion "
     ' String representation of amount.
     MyNumber = Trim(Str(MyNumber))
     ' Position of decimal place 0 if none.
     DecimalPlace = InStr(MyNumber, ".")
     ' Convert cents and set MyNumber to dollar amount.
     If DecimalPlace > 0 Then
         Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
                   "00", 2))
         MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
     End If
     Count = 1
     Do While MyNumber <> ""
         Temp = GetHundreds(Right(MyNumber, 3))
         If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
         If Len(MyNumber) > 3 Then
             MyNumber = Left(MyNumber, Len(MyNumber) - 3)
         Else
             MyNumber = ""
         End If
         Count = Count + 1
     Loop
     Select Case Dollars
         Case ""
             Dollars = "No Dollars"
         Case "One"
             Dollars = "One Dollar"
          Case Else
             Dollars = Dollars & " Dollars"
     End Select
     Select Case Cents
         Case ""
             Cents = " and No Cents"
         Case "One"
             Cents = " and One Cent"
               Case Else
             Cents = " and " & Cents & " Cents"
     End Select
     SpellNumber = Dollars & Cents
 End Function
      
 ' Converts a number from 100-999 into text 
 Function GetHundreds(ByVal MyNumber)
     Dim Result As String
     If Val(MyNumber) = 0 Then Exit Function
     MyNumber = Right("000" & MyNumber, 3)
     ' Convert the hundreds place.
     If Mid(MyNumber, 1, 1) <> "0" Then
         Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
     End If
     ' Convert the tens and ones place.
     If Mid(MyNumber, 2, 1) <> "0" Then
         Result = Result & GetTens(Mid(MyNumber, 2))
     Else
         Result = Result & GetDigit(Mid(MyNumber, 3))
     End If
     GetHundreds = Result
 End Function
      
 ' Converts a number from 10 to 99 into text. 
 Function GetTens(TensText)
     Dim Result As String
     Result = ""           ' Null out the temporary function value.
     If Val(Left(TensText, 1)) = 1 Then   ' If value between 10-19...
         Select Case Val(TensText)
             Case 10: Result = "Ten"
             Case 11: Result = "Eleven"
             Case 12: Result = "Twelve"
             Case 13: Result = "Thirteen"
             Case 14: Result = "Fourteen"
             Case 15: Result = "Fifteen"
             Case 16: Result = "Sixteen"
             Case 17: Result = "Seventeen"
             Case 18: Result = "Eighteen"
             Case 19: Result = "Nineteen"
             Case Else
         End Select
     Else                                 ' If value between 20-99...
         Select Case Val(Left(TensText, 1))
             Case 2: Result = "Twenty "
             Case 3: Result = "Thirty "
             Case 4: Result = "Forty "
             Case 5: Result = "Fifty "
             Case 6: Result = "Sixty "
             Case 7: Result = "Seventy "
             Case 8: Result = "Eighty "
             Case 9: Result = "Ninety "
             Case Else
         End Select
         Result = Result & GetDigit _
             (Right(TensText, 1))  ' Retrieve ones place.
     End If
     GetTens = Result
 End Function
     
 ' Converts a number from 1 to 9 into text. 
 Function GetDigit(Digit)
     Select Case Val(Digit)
         Case 1: GetDigit = "One"
         Case 2: GetDigit = "Two"
         Case 3: GetDigit = "Three"
         Case 4: GetDigit = "Four"
         Case 5: GetDigit = "Five"
         Case 6: GetDigit = "Six"
         Case 7: GetDigit = "Seven"
         Case 8: GetDigit = "Eight"
         Case 9: GetDigit = "Nine"
         Case Else: GetDigit = ""
     End Select
 End Function


반응형
  Comments,     Trackbacks
레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법
반응형
이미 '숫자를 문자로' 변환하는 엑셀 NUMBERSTRING 함수에 대해서 글을 올린 적이 있습니다.
그럼에도 불구하고 숫자 변환 포스트를 별도로 작성하는 이유는 엑셀 VBA 학습차원에서 진행하는 것 입니다. 특히 엑셀에서 사용자 정의 함수를 어떻게 설정하는지를 알고자 하는 것 입니다.
그리고 다음에 올릴 예정인 포스트와 연관되어 있습니다.

먼저 '숫자를 한글 또는 한자로 변환' 하기 위해 필요한 VBA코드는 아래와 같습니다.
개인적으로 참고하는 책에서도 이번 변환에 대한 설명이 있어 그대로 입력했는데 뭐가 잘못되었는지 제대로 되지 않더군요. 그래서 다음의 지식 코너를 검색해서 아래와 같이 코드를 구했습니다.


Public Function ReadNum(Num, ReadType)
    Dim L, k, i, j, n, v As Integer
    Dim Tg1, Tg2, Tg3 As Variant
    Dim g1, g2, g3 As Integer
    Dim Ans As String
    

If ReadType = 1 Then
        Tg1 = Array("", "壹", "貳", "參", "四", "五", "六", "七", "八", "九")
        Tg2 = Array("", "拾", "百", "千")
        Tg3 = Array("", "萬", "億", "兆")
    Else
        Tg1 = Array("", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구")
        Tg2 = Array("", "십", "백", "천")
        Tg3 = Array("", "만", "억", "조")
    End If
        End If
        Ans = Tg1(n) + Tg2(g2) + Tg3(g3) + Ans
    Next i
    ReadNum = Ans
End Function


사용자 정의 함수 설정 방법


1. 엑셀을 열어 새 문서를 하나 만듭니다. ALT+F11을 눌러 VB화면을 엽니다.
2. VB화면에서 '삽입'메뉴의 '모듈'을 클릭합니다.

3. 2번까지의 과정을 통해서 'Module1'이라는 이름의 모듈이 하나 생성 됩니다.

4. 이번에는 '삽입'메뉴에서 '프로시저'를 클릭합니다.
그러면 '프로시저 추가'라는 팝업창이 뜹니다.
여기서 이름(N)에는 위의 VBA코드 칸에 굵은 빨간색으로 표기된 'ReadNum'을 입력합니다.
형식에는 사용자 정의 함수 프로시저인 'Function(F)'를 체크 합니다.

5. 그러면 아래와 같이 문구가 자동 생성됩니다.
다른 거 생각하지 말고, 아래의 문구를 삭제합니다.
그리고 위의 VBA코드 전체를 복사해서 붙여넣기 합니다.

6. 5번 과정을 끝내면 아래와 같이 나타납니다.



사용자 정의 함수를 엑셀에서 이용하기


1. 먼저 아무 셀에 숫자를 입력해 봅니다.
그리고 커서를 옆 셀로 이동한 후 '함수 마법사'을 클릭 합니다.

2. '함수 마법사' 팝업창이 나타납니다.
'범주선택(C)'에 '사용자 정의'를 선택하면, '함수 선택(N)'란의 좀전에 설정했던 'ReadNum'라는 사용자 정의 함수를 선택합니다.

3. 2번 과정이 마치며 또 다시 아래와 같은 팝업창이 뜹니다.
'Num'에는 숫자가 기록된 셀 주소를 입력합니다. ReadType에는 '0'또는 '1'을 입력합니다.
(0 : 한글 표기, 1 : 한자 표기)

4. 결과 화면 입니다.
반응형
  Comments,     Trackbacks
레이의 VBA 정복기4 - 개체와 컬렉션 알아보기
반응형

프로시저를 작성할 때 기본적으로 알아야 할 개념이 바로

개체, 컬렉션, 메서드, 속성, 이벤트 등과 같은 용어이다.
엑셀VBA 관련 서적을 보거나 도움마를 찾아볼 때 이런 용어를 자주 접하게 되는데, 엑셀에서 작업하는 모든 대상을 개체(Object)라 부른다.

사용자 삽입 이미지



개체(Object)

셀, 셀 범위 영역, 위크시트, 차트, 도형, 엑셀 파일, 엑셀 프로그램 등과 같이 엑셀에서 작업하기 위해 사용하는 모든 대상 하나하나가 개체이다.



컬렉션(Collection)

반면에 여러 시트나 여러 셀 또는 여러 파일을 대상으로 작업할 때는 컬렉션(Collection) 개체를 이용한다. 즉 컬렉션은 개체를 여러 개 모아 놓은 것을 의미한다. 워크시트나 위크북(파일) 개체는 WorkSheet, WorkBook으로 표현하고, 워크북이나 워크북 컬렉션 개체는 WorkSheets, WorkBooks로 표현한다.


 저와 함께 희망을 향해 함께 달리죠.이걸 꾸~욱 누르면서



반응형
  Comments,     Trackbacks
레이의 VBA 정복기3 - 프로시저의 종류(Sub, Function, Property)알아보기
반응형

사용자 삽입 이미지


프로시저는 실행하는 성격에 따라 Sub, Function, Property로 나눌 수 있다.

프로시저에는
매크로를 작성할 때 많이 보았던 Sub 프로시저와
사용자 정의 함수를 만들 때 사용하는 Function 프로시저가 있다.
그리고 개체의 속성을 정의할 수 있는 Property도 있다.





Sub 프로시저 : 특정한 동작을 실행한다.

VBA로 프로그래밍을 하거나 매크로를 작성할 때 가장 많이 사용하는 프로시저 형태이다. 다음과 같이 Sub로 시작하여 End Sub로 끝나는데, 프로시저를 이용하여 작업할 내용은 Sub와 End Sub사이에 명령문으로 표현한다.

<형식>
Sub 프로시저 이름()
       명령문
       명령문
End Sub





Function 프로시저 : 특정한 계산을 수행하고 그 결과값을 돌려준다.

프로시저 안에 작성된 명령문을 실행하고, 실행한 결과 값을 반환할 수 있는 프로시저이다. 기존 엑셀함수에는 없는 새로운 사용자 정의 함수를 만들 때도 Function 함수를 사용한다.
다음과 같이 Function으로 시작하여 End Function으로 끝나는데, 프로시저를 이용하여 작업할 내용은 Function과 End Function 사이에 명령문으로 표현한다. 이때 결과 값은 프로시저 이름을 이용하여 반환한다.

<형식>
Function 프로시저 이름()
             명령문
             명령문
             프로시저 이름 = 값
End Function







Property 프로시저

개체의 속성에 값을 할당할 때 사용하는 프로시저가 Property이다. 속성 값을 할당할 때는 Property Let()문을 사용하고, 속성 값을 읽어 들일 때는 Property Get()문을 사용한다. 그리고 개체 참조의 값을 반환하기 위해서는 Property Set문을 사용한다.

<형식>
Property Get[Let|Set] 프로시저 이름()
            명령문
            명령문
            [Get인 경우 프로시저 이름 = 값]
End Property


 


반응형
  Comments,     Trackbacks
레이의 VBA 정복기2 - VBA 구성요소
반응형

VBA 프로그래밍의 구성 요소

■ 코드 : VBA 프로그램의 최소 단위
■ 프로시저 : 코드들의 묶음으로 특정 작업을 수행할 수 있는 단위
■ 모듈 : 관련된 작업에 해당하는 여러 프로시저들의 묶음 단위
■ 프로젝트 : 여러 모듈이 저장될 수 있는 하나의 엑셀 통합 문서



코드란?


프로그램을 구성하는 가장 최소 단위는 코드이다. 매크로 기록 기능을 이용하여 변환된 프로그램 내용을 확인했을 때, 각 문장을 구성하는 명령어 하나하나가 코드에 해당된다.


프로시저란?

코드들이 모여 한 문장을 완성하게 되고, 이러한 문장들이 모여 하나의 프로시저가 완성된다. 따라서 프로시저는 특정 작업을 수행하여 결과를 확인할 수 있는 프로그램 단위라 볼 수 있다. 매크로 기록 기능을 이용하여 기록된 매크로도 하나의 프로시저에 해당된다.


모듈이란?

하나의 엑셀 파일에는 여러 가지 작업을 수행하는 프로시저가 존재할 수 있다. 각 작업 용도에 따라 별개의 프로시저를 작성하게 되는데, 이와 같이 여러 프로시저가 묶여 하나의 모듈이 된다.


프로젝트란?

여러 개의 모듈들이 모여 하나의 프로젝트가 된다. VBA에서 하나의 엑셀 파일에 작성되어 저장되는 모든 코드 내용을 묶어서 프로젝트라고 할 수 있다. 따라서 여러 엑셀 파일이 열려 있는 경우 VBE 창을 열면, 프로젝트 탐색기 창에 열려 있는 파일 하나하나가 프로젝트 단위로 표시되다.



저와 함께 희망을 향해 함께 달리죠.이걸 꾸~욱 누르면서




반응형
  Comments,     Trackbacks
레이의 VBA 정복기1 - VBA란 무엇인가?
반응형

사용자 삽입 이미지

VBA란 무엇인가?

VBA란?

VBA는 Visual Basic Application의 약자로서 비주얼 베이식이라는 프로그래밍 언어를 이용하여 직접 프로그래밍할 수 있는 하나의 응용 프로그램이다. VBA는 매크로와 마찬가지로 Microsoft Office제품(Word, Excel, PowerPoint, Access)에 기본적으로 내장되어 있다. 따라서 별도의 추가 작업을 필요로하지 않는다.


매크로와 VBA의 차이점

매크로는 프로그래밍에 대한 이해가 하나도 없는 상태에서도사용하는 것에 큰 무리가 없다. 매크로 기록기가 자동으로 작업하는 내용을 코드로 변환하기 때문이다. 하지만 매크로를 이용하여 작업하다 보면, 조금 더 복잡하고 다양한 작업인 경우에 구현할 수 없는 문제가 발생할 수 있다. 이와 같은 경우 작업을 직접 코드로 입력하여 프로그래밍할 수 있는데, 이때 VBA를 이용한다. VBA는 매크로보다는 전문적인 프로그래밍 지식이 필요하지만 훨씬 편리할 뿐만 아니라 다양하고 고급스러운 작업을 처리할 수 있다.


VBE 창이란?

VBA 기능을 이용하여 프로그래밍할 때 사용하는 작업 창을 VBE(Visual Basic Editor)라고 부른다. 실제 Visual Basic 프로그래밍 언어를 이용하여 프로그래밍하는 작업 창과 동일한 화면 구성을 가진다. 이뿐만 아니라 사용하는 명령도 Visual Basic 명령 구문을 그대로 사용한다.


사용자 삽입 이미지
* 프로젝트 탐색기 창 : 현재 작업할 코드가 저장될 위치가 선택하게 된다.

* 속성 창 : 선택한 개체가 가지고 있는 특성이나 성격을 정의할 대 사용한다.

* 코드 창 : 새로 작성하거나 이미 작성한 VBA코드 내용이 저장되는 장소이다.











참고서적 : 웃으며 찾는 엑셀매크로 & VBA활용사전 212 / 선양미,웰기획 지음 / 사이버출판사



저와 함께 희망을 향해 함께 달리죠.이걸 꾸~욱 누르면서






반응형
  Comments,     Trackbacks
VBA 정복을 위한 출사표를 던지다.
반응형


사용자 삽입 이미지

십년이 넘는 세월동안 정복하고 싶은 대상이었던 VBA!
그 세월동안 몇 권의 책을 구입하기도 했고, 인터넷 사이트 몇 군데를 왔다 갔다 번두리만 기웃거렸다.

이제서야 VAB에게 정식 도전장을 내밀면서 출사표를 던진다. 화이팅.


저와 함께 희망을 향해 함께 달리죠.이걸 꾸~욱 누르면서


반응형
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
TODAY TOTAL