엑셀VBA (4)
엑셀팁 - 특정 셀의 입력값에 따라 시트이름 자동 변환
반응형

앞선 글 "엑셀팁 - 특정 셀의 클릭시 새로운 시트 생성 & 이름 자동"과는

달리 이번 글은 이미 생성되어 있는 시트의 이름을 특정셀의 값으로 가져오는 것이다.

 

예를들면 홍길동의 자료가 담긴 시트가 있다면, A5셀에  '홍길동'입력하면 그 시트 이름이 '홍길동'으로 자동변환하게 된다.

엑셀에서 '홍길동' 시트 복사하면 시트 이름이 '홍길동 (2)'이 된다.

여기서 A5셀에 '이순신'을 입력하면 시트 이름이 '이순신'으로 자동변환된다.

 


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Name = ActiveSheet.Range("A5").Value
End Sub


특정 셀의 입력값에 따라 시트이름 자동변환.txt
0.00MB

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

레이의 VBA정복기9- 변수란 무엇인가1


[ 용어정리 ]

Dim : '선언하다'라는 의미로서 변수 등을 지정할 때 본 용어를 사용한다.

변수 : 아래 예문에서 나오는 'x,y,k'가 변수에 해당된다.

예를 들면 '1 + 2 =3'이라는 수식에서 1~3은 변수로서 말 그대로 변하는 숫자다.

As : 영어 단어로서 생각해 보면 '~~~로써'이다.

'x As Integer'를 그대로 해석해보면 '변수 x 는 정수로써'이다.

편의상 '~~~이다'로 이해하면 된다. 즉 '변수 x는 정수이다'로 이해하면 된다.

'


 Dim x As Integer 

위 내용을 바탕으로 Dim x As Integer를 해석하면, '변수 x를 정수로 선언하다'로 보면 된다.



예문1.

Sub Ingeter변수란무엇인가()

Dim x As Integer

Dim y As Integer

Dim k As Integer

    

x = Sheets("sheet1").Range("B1").Value

y = Sheets("sheet1").Range("B2").Value

k = x* y

Sheets("sheet1").Range("B3") = k

End Sub


예문2.

Sub Double변수란무엇인가()

Dim x As Double

Dim y As Double

Dim k As Double


x = Sheets("sheet1").Range("A1").Value

y = Sheets("sheet1").Range("A2").Value

k = x * y

Sheets("sheet1").Range("A3") = k

End Sub


위 두 예문의 차이점은 변수의 종류를 예문1에서는  Integer를, 예문2에서는 Double로 사용했다는 것이다.

여기서는 변수의 종류에 대해서 간단히 정리한다.




[ 변수의 종류 ]

 Integer 

정수형 데이터 형식으로서, '-32,768 ~ 32,767' 사이의 정수형 데이터가 사용범위이다.

소수점이 있는 데이터는 사용할 수 없다.



 Long 

역시 정수형 데이터 형식으로서, '-2,147,483,648 ~ 2,147,483,647' 사이의 정수형 데이터가 사용범위이다.

Integer와 마찬가지로 소수점이 있는 데이터는 사용할 수 없다.



 Single 

실수형 데이터 형식으로서, 비교적 작은 숫자를 사용할 수 있다(정확한 범위는 잘 모르겠다).

Integer와 Long변수에서는 사용할 수 없는 소수점이 있는 데이터를 사용할 수 있다.

 


 Double 

실수형 데이터 형식으로서, 큰 숫자를 사용할 수 있다.

소수점이 있는 데이터를 사용할 수 있는데 Single보다 더 큰 숫자가 들어갈 수 있다.



 String 

문자열 데이터 형식을 변수일 때 사용할 수 있다.

 


 Variant 

가변 데이터 형식으로서 정수형, 소수점이 있는 실수형, 문자형 데이터를 저장할 수 있다. 




위 변수 이외에는 몇가지가 더 있으나 이것들은 패스한다.


이전 관련글 보기  

 - VBA 정복을 위한 출사표를 던지다.


 - 레이의 VBA 정복기1 - VBA란 무엇인가?


 - 레이의 VBA 정복기2 - VBA 구성요소


 - 레이의 VBA 정복기3 - 프로시저의 종류 알아보기


 - 레이의 VBA 정복기4 - 개체와 컬렉션 알아보기


 - 레이의 VBA정복기5- 엑셀 개체 다루기1


 - 레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법


 - 레이의 VBA정복기7- 숫자를 영어로 변환하는 방법


 - 레이의 VBA정복기8- Vlookup 사용하기


이후 연관글 보기  



반응형
  Comments,     Trackbacks
생산관리 프로그램 with Excel VBA for 조선 블록 생산
반응형

아무리 사고적 욕구가 강하더라도 현실의 필요성에 따라 실행 여부가 결정되는 모양입니다.
몇 해전부터 배움에 대한 강한 열기를 공개한 적이 있습니다.

하지만 여전히 답보 상태입니다.
바로 현실 생활에서 도입의 필요성이 낮았기 때문입니다.
지금껏 알고 있는 지식의 범위로도 기존의 업무 진행에는 큰 무리 없이 보낼 수 있었던 상황도 한 이유가 되기도 했습니다.

그리고 당장의 급한 것(전술-Tactics)에 허덕이다 보니 전략적 대비를 등한시 한 것 입니다. 전략이 누락된 실행은 곧 임기응변의 요령만 키우고, 손발의 분주함을 증가시킵니다.
그러다 보니 정작 필요한 일에 투입할 수 있는 시간을 갈아먹는 상태까지 초래합니다. 
지금껏 뭘 했나라는 후회와 함께 스스로에게 압박을 가하기 위해 책 한권을 샀습니다.

이 책을 통해 궁극적으로 도달하고자 하는 바는 엑셀 VBA를 이용해서 아래와 같은 프로그래밍을 식은 죽 먹기 보다 쉽게 만들 수 있는 능력을 가지는 것 입니다.

이번 Excel VBA프로그램은 네이버 카페(Excel Community Center)의 운영자인 마니또님이 만들어 주신 것 입니다. 제가 요청을 드린지 불과 8~10시간 만에 해결해 주셨습니다. 신속한 답변과 내용의 충실성에 고마울 따름 입니다.


조선 블록 생산관리 프로그램 설명


1. 프로그램의 목적

조선 블록 생산공정율 에 따라 해당 장소의 공정율이 지정된 색상으로 자동 변경되게 함.
그래서 한 장의 그림으로 모든 공정의 진행율을 시각적으로 표현되게 함.

2. 프로그램 실행법

화면1

화면1

 2.1. 위 '도형' Sheet는 공정율이 0%일 경우를 보여 줍니다.


화면2

화면2

공정 진행율에 따라 좌측 그림(화면2-'색상조견표'Sheet)에서 지정한 색상이 '도형'Sheet에 그대로 반영됩니다.
'화면1'은 전부 빨간색으로 칠해졌으니 모든 블록(101~902)의 공정율이 Zero임을 알 수 있습니다.



 2.2. '화면3'처럼 'DATA' Sheet에는 공정율이 하나도 반영이 되어 있지 않습니다.
화면3

화면3











2.3. 만약 'DATA' Sheet에 '화면4'처럼 104~106 블록과 205~206블록에 해당 공정율을 입력하면

화면4

화면4


2.4. '도형'Sheet 상에 104~106블록에는 '색상조견표'에 지정한 분홍색(형강재가공)이,
205~206블록에는 빨간색(도면출도)으로 바뀌면서 해당 공정이 완료되었음을 비쥬얼로 보여 줍니다.
화면5

화면5 - 조선 블록의 공정율


3. 앞으로의 보완점
3.1. 'DATA' Sheet에 인위적으로 입력하는 것을 배제하고 생산일보의 자료를 링크시켜 자동 입력되게 함으로써 실시간 공정현황을 체킹할 계획 입니다.
3.2. 각 해당 공정율로 100%단위에서 10%단위로 관리할 계획 입니다.
예를 들어 취부 공정율이 "0%이냐 ? 100%이냐?"라는 2가지 기준이 아니라, 10%단위씩 반영되도록 할 계획 입니다.
 

반응형
  Comments,     Trackbacks
레이의 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
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   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