엑셀함수 (15)
엑셀팁 - 다중조건에서 구간값 구하기
반응형

짧은 문구 속에 내가 목적한 내용을 온전히 표현하기 쉽지 않다.

 

그림1에서는 기준데이타가 A1:E26에 담겨져 있다.

이를 토대로해서 품목, 타입 및 주문수량을 감안하여 가격을 자동으로 산출한다.

산출수식은 그림1속에 표기해 둔다(네이버 지식IN에 내가 질문한 내용을 지식인이 알려준 내용임).

 

 

 

그림1

그림2는 기준데이타가 I5:Q10에 담겨져 있다.

포멧이 그림1과는 약간 다르기에 이 글에 담아 저장한다.

 

그림2

 

반응형
  Comments,     Trackbacks
레이의 VBA정복기8- Vlookup 사용하기
반응형

엑셀 함수 중에서 가장 유용한 함수가 Vlookup함수 아닐까 싶다.

그렇다면 Vlookup기능을 엑셀VBA에서도 구현 가능할까.....?

당연히 가능하다.


앞으로 엑셀VBA를 다시 배워볼 요량이기에 이 글은 메모 차원에서 발행한다.



위 조견표를 기준으로 해서 D3과 D4셀의 입력된 값에 따라 E3,E4에 해당 되는 값을 연결해 주는 함수가 Vlookup이다.


이를 VBA로 코딩하면 아래와 같이 나온다.


각각의 의미는 다른 예제를 통해서 서서히 익혀 나가보자.



이전 관련글 보기  

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


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


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


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


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


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


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



반응형
  Comments,     Trackbacks
엑셀팁 - 100단위로 올림 혹은 내림 처리 함수
반응형


[ 올림 처리 함수 ]                         [ 내림 처리 함수 ]  
CEILING(number,significance)              FLOOR(number,significance)
    number: 올림 처리를 대상                    number: 내림 처리를 대상
  significance: 올림 처리를 할 배수            significance: 내림 처리를 할 배수  


반응형
  Comments,     Trackbacks
엑셀팁 - 일련번호 부여 방법
반응형
올해부터 전자세금계산서 발행이 시작되었습니다.
세금계산서의 처리가 용이(시행 전에는 일일이 우편으로 발송하거나, 납품시 전달하는 방식에서 이메일로 세금계산서 전달 방식으로 변화)하게 됨에 따라 일괄 발행에서 건별 발행으로 업무가 진행되고 있는 듯 합니다. 물론 발행비용이 ZERO이거나 아주 아주 저렴할 경우에 한해서 입니다.

동일한 업체(아래 그림 D열) 중에서 같은 것이 있으면, 일련번호(E열) 열에 2,3,4,..처럼 번호를 매기는 방법을 COUNTIF 엑셀함수를 통해서 나타내는 방법을 올립니다.

E5셀에 아래와 같이 입력하여 밑으로 주욱 드래그하면 됩니다.
IF(D5="","",COUNTIF($D$5:D5,D5))

참고
1. '$D$5'는 D5셀을 클릭한 후, F4번 키이를 누르면 됩니다.
2. C열의 No. 1,2,3,4,5,.... 은 SUBTOTAL함수를 적용합니다.


본 내용은 오피스 튜터 MVP이신 권현욱(엑셀러)님께서 작성하신 '품목별 일련번호를 매길 수 있는 방법'를 전자세금계산서 발행 건수에 사례로 전환하여 포스트 작성을 하였습니다.

권현욱님께서는 단순히 함수의 정의만 외우고 있어서는 실제 적용에 한계가 있음을 주장하고 있습니다. 즉 함수의 이름을 알고 있는 것이 중요한 것이 아니라 함수의 속성과 본질을 잘 이해해야 한다는 점 입니다.
함수의 속성과 본질을 이해함에 따라서 그 응용력이 생기고 확대된다는 것 입니다.
반응형
  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
레이의 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
엑셀로 만든 블로그 이벤트 당첨자 발표용 자동추출 프로그램
반응형
블로그를 하다보면 심심치 않게 이벤트에 당첨되는 사례가 맞습니다.  저의 경우에도 많은 이벤트에 참여해서 수도 없이??? 당첨되었습니다.  이벤트에 참여하면서 들었던 생각이 있습니다.

'이벤트 주최자들은 어떻게 당첨자를 선정할까?'라는 것 입니다.

솔직히 주최자의 주관적 판단에 좌지우지되는 경우도 있을 거라 생각합니다.  특정 후보자에게 느끼는 인간적 감정, 후보자의 방문이력, 남겨준 댓글이력, 후보자의 파워 등등 입니다.

블로그 운영자라면 누구나 한 번쯤 꿈꾸는 '이벤트' 진행을 저도 하였습니다.
이사문제로 늦게나마 당첨자 발표를 준비하게 되는 과정에서 '선정방식'에 대해서 몰두하였습니다. 인터넷 검색을 통해 알아보니 '로또번호 자동추출기'는 많이 나오는데 이벤트 당첨자 발표와 관련한 좋은 프로그램이 없어서 직접 만들었습니다. 




   이벤트 당첨자 발표용 자동추출(엑셀)
 




다양한 이벤트 가 동시 진행한다는 기준으로 엑셀 을 이용하여 만들었습니다.
이벤트 명 입력, 선발자 수와 후보자 이름을 먼저 기록합니다. 기초 자료 입력이 끝나면 이미지 상단의 이벤트명에서 이미 구분영역에 입력되어 있는 이벤트명을 선택합니다.

이벤트명 선택과 동시에 아래와 같이 1명이 자동으로 당첨됩니다.

첫 번째 당첨자 '미실이'이 적혀 있는 곳에 별도의 초록색과 같은 구분 표시를 합니다.


이벤트 선발자 수가 2명입니다. 여기서 F9번 KEY를 누르시면,
아래와 같이 다음 당첨자가 나옵니다.


요즘 제가 재미있게 시청하는 '선덕여왕' 이벤트로 당첨된 사람은 바로 미실이와 문노 입니다. 



의외의 결과로군요.
 제가 선덕여왕을 재미있게 본다지만, 이벤트 당첨 선물 품목이 10만원 상품권이라면, 개인적 편애에 의해서 김유신, 선덕여왕에게 주고 싶겠지요. 하지만 자동추출 프로그램에 의하면 선덕여왕에서 악역을 하는 '미실'과, 얼굴 한 번 나오지 않은 '문노'가 당첨자가 될 수도 있습니다. 공정하게 선정했다고 볼 수 있지요.

 

인지상정! 어쩔 수 없을 경우.....
 하지만! 공정하게 할려고 해도, 끌리는 후보자가 있습니다. 왠지 이 사람이 당첨되었으면 좋겠다....선물 품목이 이 사람에게 정말 필요할 것 같다...는 생각을 하게 마련 입니다.
이때는 후보자 이름을 기록을 할 때 중복해서 입력해 보는 것도 괜찮겠지요.
중복을 넘어서 삼중,사중, 오중, 육중......도 가능하겠지요. 그 만큼 확률이 높을테니깐요.



제가 만든 허접한 엑셀파일을 올립니다. 비밀번호는 9876 입력입니다.
반응형
  Comments,     Trackbacks
엑셀 - 중복 데이터 입력 방지
반응형
자료를 입력하다 보면 특히 숫자나 일련번호 형태의 데이타는 중복입력될 가능성이 많습니다. 현재 입력하는 데이터가 이미 입력된 데이타와 중복할 경우 중복이라는 메세지가 나온다면 편리할 것 입니다.

여기서는 사원번호라고 되어 있지만 실생활에서는 여러가지가 적용될 수 있습니다. 이를테면 주민등록번호 혹은 학번들이 될 수 있습니다. 구체적인 방법은 다음과 같습니다.



위와 같이 중복 입력 메세지를 나타나도록 하는 방법 입니다.







1. 중복 입력 여부를 확인할 블록을 먼저 지정합니다.
여기서는 E4:E24 범위 입니다.










2. '데이타' 메뉴의 '유효성 검사' 선택 합니다.
설정탭을 선택한 후 제한대상수식을 위와 같이 입력합니다.











3. 테이터 유효성  검사에서 오류메시지탭을 선택한 후 아래와 같이 스타일, 제목
, 오류 메시지
등을 입력 합니다. 그리고 확인 버튼을 누립니다.





반응형
  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