Option Explicit

Sub UserFn_Find()' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date : 2014-08-21

'루프 변수
Dim ii    As Double
Dim jj    As Double
Dim kk    As Double
Dim pp    As Double
Dim MySheet    As Worksheet

Dim TheLink As Variant        '외부링크 파일 찾아 저장
Dim My_Link As Variant        '그 중 사용자 함수만 추출

Dim tmpString As String
Dim tmpArray() As String      '목록을 임시로 저장하는 변수

TheLink = ActiveWorkbook.LinkSources(xlExcelLinks) '링크 차즌 담
kk = UBound(TheLink)          '개수를 세어보고

jj = 1
ReDim My_Link(1 To 2, 1 To jj) As Variant
      My_Link(1, 1) = "Path"
      My_Link(2, 1) = "File"

For ii = 1 To kk                   '링크 개수만큼 루프 돌되
     tmpString = TheLink(ii)            '임시 문자열에 링크명을 넣고
     pp = InStrRev(tmpString, "\")
     tmpString = Mid(tmpString, pp + 1) '임시문자열에서 파일명만 추출합니다
     
     If Workbooks(tmpString).IsAddin = True Then  '추가기능일 경우만 재적립 시킴
          jj = jj + 1
          ReDim Preserve My_Link(1 To 2, 1 To jj) As Variant
               My_Link(1, jj) = TheLink(ii)       '차후 File Open 용
               My_Link(2, jj) = tmpString         'UDF Find 용
     End If
     
Next


'찾기를 위한 임시변수
Dim c As Range, rng As Range
Dim tmpAddress As String


If jj < 2 Then
          MsgBox " 이 파일에는 읍사와유 ", , "그럼 이만..."
          Exit Sub
End If


Set rng = Application.InputBox(vbLf & "   가로로 네(4) 열 차지합니다", "   기록할 셀 지정합니다.", Type:=8)

pp = UBound(My_Link, 2)
For ii = 2 To pp                        '일단 닫고
     Workbooks(My_Link(2, ii)).Close
Next


jj = 1
ReDim tmpArray(1 To 4, 1 To jj) As String
     tmpArray(1, 1) = "추가기능 File"
     tmpArray(2, 1) = "사용된 시트"
     tmpArray(3, 1) = "셀 주소"
     tmpArray(4, 1) = "수식"


'여기서 파일명 검색으로 뒤져봅니다
For ii = 2 To pp
tmpString = My_Link(1, ii)
For Each MySheet In ActiveWorkbook.Sheets              '워크북에서 시트를 돌며 검색합니다.
     
     With MySheet.Cells                                '시트에서 ...
          Set c = .Find(tmpString, LookIn:=xlFormulas)      '해당 파일명을 검색합니다.
          If Not c Is Nothing Then
                    tmpAddress = c.Address
               Do
                    jj = jj + 1                             '만일 있으면 누적시켜 저장합니다.
                    ReDim Preserve tmpArray(1 To 4, 1 To jj) As String
                         tmpArray(1, jj) = tmpString        '파일명
                         tmpArray(2, jj) = MySheet.Name     '사용된 시트명
                         tmpArray(3, jj) = c.AddressLocal(0, 0)  '셀 주소
                         tmpArray(4, jj) = c.Formula         '수식
               Set c = .FindNext(c)
               Loop While Not c Is Nothing And c.Address <> tmpAddress
          End If
     End With
     
Next
Next


For ii = 2 To pp                       '닫은 추가기능을 다시 열고
     Workbooks.Open Filename:=My_Link(1, ii)
     Application.Volatile
Next
     

'그 결과를 행/열을 바꿔서 배열로 만들고
Dim TheAnswer
ReDim TheAnswer(1 To jj, 1 To 4)

For kk = 1 To 4
     TheAnswer(1, kk) = tmpArray(kk, 1)
Next


For ii = 2 To jj
For kk = 1 To 4
     TheAnswer(ii, kk) = tmpArray(kk, ii)
Next

     tmpString = TheAnswer(ii, 1)
     TheAnswer(ii, 1) = Mid(tmpString, InStrRev(tmpString, "\") + 1)
     
     tmpString = TheAnswer(ii, 4)
     TheAnswer(ii, 4) = " =" & Mid(tmpString, InStrRev(tmpString, "!") + 1)
     
Next

'바뀐 결과를 셀에 기록합니다
rng.Resize(jj, 4) = TheAnswer


'변수 초기화 마무리는 직접 하시기 바랍니다.


End Sub         ' ___ 모듈 종료


http://ozman.tistory.com/113 글의 신 버전입니다

Posted by 오즈맨스머프


                                                  
  안녕하세요. 오즈맨 입니다.
 시트명은 Sheet1 입니다.
[ 문자열 비교하는 사용자 함수 ] 예제 입니다.
 
10 
B C D E
반복암기장     비교결과
단어 답안  
 aunt  고모 이모 이모  고모 같음
 autumn    가을 <다름>
 baby    아기 <다름>
 banana    바나나 <다름>
 band  끈 악단 끈 악단 같음
  부제 설명 부제,설명 같음
  부제 설명1 부제,설명2 <다름>
      같음


Sheet1
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다. 결과 비고
1 E3 =StrComp(C3,D3) 같음  
2   E3  셀의 수식을 여기에 복사하세요 -→ E3:E10    

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일을 참조하시거나, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.
수식에 사용자 정의 함수가 있습니다. 다른 파일에서는 안 될 수 있습니다.
  주) 사용자 정의 함수를 많은 셀에 사용하면 버벅거릴 수 있습니다.
사용자 정의 함수를 사용했던 영역은 그 영역을 복사한 다음
편집/메뉴에서 선택하여 붙여넣기를 선택, 값으로 변환하는 것이 좋습니다.사용자 함수 만들기 입니다. [ 클릭 ]

     예제에서는 "고모 이모" 와 "이모 고모" 를 같은 문자로 판단합니다.


Option Explicit
Function StrComp(ChkString_1 As String, ChkString_2 As String, Optional CheckString As String = " ")' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date : 2009-03-29
Dim i As Double, cnt As Double
Dim HisStr1    As Variant
Dim HisStr2    As Variant
Dim MyStr1     As Variant
Dim MyStr2     As Variant
Dim ShrStr     As String
     ShrStr = ","
cnt = Len(ChkString_1) + Len(ChkString_2)
If CheckString = " " Then
     HisStr1 = Trim(ChkString_1)
     HisStr2 = Trim(ChkString_2)
Else
     HisStr1 = Trim(Replace(ChkString_1, CheckString, " "))
     HisStr2 = Trim(Replace(ChkString_2, CheckString, " "))
End If
     HisStr1 = Trim(Replace(HisStr1, ShrStr, " "))
     HisStr2 = Trim(Replace(HisStr2, ShrStr, " "))
For i = 1 To cnt
     HisStr1 = Replace(HisStr1, "  ", " ")
     HisStr2 = Replace(HisStr2, "  ", " ")
Next
     MyStr1 = Split(HisStr1)
     MyStr2 = Split(HisStr2)
If UBound(MyStr1) <> UBound(MyStr2) Then
     StrComp = "<다름>"
     Exit Function
End If
Dim StrNew As New Collection
cnt = UBound(MyStr1)
On Error Resume Next
For i = 0 To cnt
     StrNew.Add i, CStr(MyStr1(i))
Next
For i = 0 To cnt
     Err.Clear
     StrNew.Add i, CStr(MyStr2(i))
     If Err.Number = 0 Then
          StrComp = "<다름>"
          Exit Function
     End If
Next
     StrComp = "같음"
End Function         ' ___ 모듈 종료

파일 다운로드
Posted by 오즈맨스머프


 [ 숫자 문자 혼용한 숫자에 콤마를 삽입하기 ] 에 대해 알아봅니다.
 
A B
홍길동1000000 홍길동1,000,000
홍길동1000 전우치 2000 홍길동1,000 전우치 2,000
12345만세34568조중동폐간 12,345만세34,568조중동폐간


Sheet1
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 B2 =SampleStrNum(A2) 홍길동1,000,000
2   B2  셀의 수식을 여기에 복사하세요 -→ B2:B4    

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일을 참조하시거나, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.

Option Explicit

Function SampleStrNum(MyStr As String)
Dim i As Double, j As Double, k As Double
Dim Strr As String  '한 글자씩 오려내는 문자변수
Dim cnt As Double   '문자열의 길이
Dim VarStr() As String   '문자열끼리 모이는 임시변수
Dim VarNum() As String   '숫자끼리 모이는 임시변수
Dim Power1 As String     '직전에 처리한게 숫자였냐 문자냐
Dim Power2 As String     '지금 처리할 문자가 숫자냐 문자냐
Dim MyAnsw() As String   '최종 결과
Dim Num1st As Boolean    '첫 부분이 숫자이냐 아니냐
ReDim VarStr(1 To 1) As String     '문자열끼리 모이는 임시변수
ReDim VarNum(1 To 1) As String     '숫자끼리 모이는 임시변수
     cnt = Len(MyStr)    '입력받은 문자열의 길이

For i = 1 To cnt         '문자열 처음부터 끝까지를 보되
Strr = Mid(MyStr, i, 1)  '그 중 지정한 위치의 한 글자
     If IsNumeric(Strr) Then  '그 글자가 숫자이면
          Power2 = "num"      '지금 처리할 문자가 숫자면 Power2 를 num 으로
          If Power1 <> Power2 Then      'Power1 , Power2 가 다르다면
               j = j + 1      '숫자용 변수를 하나 증가시키고
               ReDim Preserve VarNum(1 To j) As String '변수를 재 선언하고
               Power1 = Power2     'Power1 , Power2 를 일치시킵니다.
          End If
               VarNum(j) = VarNum(j) & Strr  '해당 변수에 있는 숫자에 지금 숫자 한자리를 붙입니다.
     If i = 1 Then Num1st = True        '첫 부분이 숫자이냐 아니냐만을 판단합니다
     Else
          Power2 = "str"      '지금 처리할 문자가 문자라면 Power2 를 str 으로
          If Power1 <> Power2 Then      'Power1 , Power2 가 다르다면
               k = k + 1      '문자용 변수를 하나 증가시키고
               ReDim Preserve VarStr(1 To k) As String '변수를 재 선언하고
               Power1 = Power2     'Power1 , Power2 를 일치시킵니다.
          End If
               VarStr(k) = VarStr(k) & Strr  '해당 변수에 있는 숫자에 지금 숫자 한자리를 붙입니다.
     End If
Next
     If j > k Then  '숫자용 변수의 개수 j 와
          cnt = j   '문자용 변수 k 중 큰거를 기준으로합니다
     Else
          cnt = k
     End If
ReDim MyAnsw(1 To cnt) As String   '결과 배열을 만든 다음
If Num1st = True Then              '첫 부분이 숫자이면 여기를 수행
     For i = 1 To cnt
          If Not IsEmpty(VarNum(i)) Then     '숫자 부분이 공백 아니면(값이 있으면)
          MyAnsw(i) = Format(VarNum(i), "#,#")    ' 천단위 , 찍은값으로 표시
          End If
     MyAnsw(i) = MyAnsw(i) & VarStr(i)       '좀전에 받은 숫자와 문자변수중 하나를 연결합니다
     Next
Else                               '첫 부분이 문자이면 여기를 수행
     For i = 1 To cnt
     MyAnsw(i) = VarStr(i)         '문자변수중 하나를 대입한 다음
          If Not IsEmpty(VarNum(i)) Then     '숫자 부분이 공백 아니면(값이 있으면)
          MyAnsw(i) = MyAnsw(i) & Format(VarNum(i), "#,#")  ' 천단위 , 찍은값을 연결합니다
          End If
     Next
End If
SampleStrNum = Join(MyAnsw, "")    '숫자와 문자를 연결한 MyAnsw 의 각 값을 하나로 모읍니다.
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요



Posted by 오즈맨스머프


  [ 연속적으로 이어지는 셀 주소 만들기 ] 에 대해 알아봅니다.
  A B C
1 원래문자열
연속으로 이어지는 문자열
2 C1~C3,C6,C7,C19
C1,C2,C3,C6,C7,C19
3 R25~R33
R25,R26,R27,R28,R29,R30,R31,R32,R33
4 C8~C17
C8,C9,C10,C11,C12,C13,C14,C15,C16,C17
5 R10
R10


Sheet1
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
  $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다. 결과 비고
1 C2 =ShrStrings(A2) C1,C2,C3,C6,C7,C19
2   C2  셀의 수식을 여기에 복사하세요 -→ C2:C5


  보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.  
  원하는 부분을 시트(셀)에 붙여 넣으세요.
    도움이 되시기를 바랍니다.
수식에 사용자 정의 함수가 있습니다. 다른 파일에서는 안 될 수 있습니다.
 주) 사용자 정의 함수를 많은 셀에 사용하면 버벅거릴 수 있습니다.
사용자 정의 함수를 사용했던 영역은 그 영역을 복사한 다음
편집/메뉴에서 선택하여 붙여넣기를 선택, 값으로 변환하는 것이 좋습니다.

Option
Explicit

Function ShrStrings(str As String)
Dim tmp1, tmp2
Dim i As Double, j As Double, k As Double
tmp1 = Split("," & str, ",")
Dim cnt1 As Double
Dim cnt2 As Double
     cnt1 = UBound(tmp1)
For i = 1 To cnt1
     tmp2 = Split("~" & tmp1(i), "~")
     k = UBound(tmp2)
     If k = 1 Then
          ShrStrings = ShrStrings & "," & tmp1(i)
     Else
          cnt2 = Range(tmp2(2)).Row - Range(tmp2(1)).Row + 1
          For j = 1 To cnt2
               ShrStrings = ShrStrings & "," & Range(tmp2(1))(j, 1).Address(0, 0)
          Next
     End If
Next
ShrStrings = Trim(Mid(ShrStrings, 2))
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요
이 파일을 다운로드 해보세요
Posted by 오즈맨스머프


사용자 정의 함수를 사용하거나 만들어야 하는 경우가 있습니다.
엑셀에서 사용자 정의 함수를 만드는 간단한 과정입니다.
만들기 1 단계
엑셀에서 도구-매크로-Visual Basic Editor
를 선택합니다.
혹은 알트 를 누른채로 F11 을 누릅니다.
사용자 함수를 사용하는 1 단계
셀에 사용자 함수명을 입력하고
필요한 인수를 입력합니다.
만들기 2 단계
새로운 창이 나와도 놀라지 말고
메뉴 중 삽입-모듈 을 선택합니다.
마무리 단계
원하는 결과가 나온걸 확인합니다.
만들기 3 단계 (마지막)
왼쪽에 모듈이 추가된걸 확인하고
오른쪽 창에 코드를 입력(붙여넣기)합니다.
- 참고 -
사용자 정의 함수가 있는 파일은
"매크로 포함 으로 열어야"합니당
주의사항
 사용자 정의 함수를 많은 셀에 사용하거나 혹은 엄청 많은 영역을 참조하면
 엑셀이 버벅거리거나 "응답없음" 으로 나올 수 있습니다.

 만일을 대비해서 사용자 정의 함수를 사용했던 영역은

 그 영역을 복사한 다음 편집/메뉴에서
(혹은 마우스 오른쪽 클릭)
 선택하여 붙여넣기를 선택, 값으로 변환하는 것이 좋습니다.
 아래는 사용자 정의 함수를 만들고 사용하는 예제입니다.
   1) 셀의 수식을 나타내는 사용자 정의 함수
   2) 셀에 있는 수식을 계산한 결과를 나타내는 사용자 정의 함수입니다.
Option Explicit
Function ViewSuSik(r As Range)
ViewSuSik = r.Formula
End Function
셀의 수식을 눈으로 볼 수 있게 합니다
=ViewSuSik(A1) 처럼하면 A1 의 수식이 보이게 됩니다.

Function GetAnswer(r As Range)
GetAnswer = Application.Evaluate(r.Value)

End Function
입력되어있는 수식의 계산결과를 보입니다.
=GetAnswer(A1) 하면 A1 에 있는 5+8+10 을 계산한 결과 23 을 나타냅니다.

                                                                                                                                          도움이 되시기바랍니다.
Posted by 오즈맨스머프


                                                  
  안녕하세요. 오즈맨 입니다.
 시트명은 Sheet1 입니다.
[ 숫자를 영어로 나타내는 사용자 함수 (NUM2DOLLAR) ] 예제 입니다.
   예제 - 1 NUM2DOLLAR (숫자)
   기본 화폐 단위 = 달러
   예제 - 2 NUM2DOLLAR (숫자, "fran")
 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
A B C D E
      1 One Dollar.
      109 One Hundred Nine Dollars.
      218 Two Hundred Eighteen Dollars.
      326 Three Hundred Twenty Six Dollars.
      435 Four Hundred Thirty Five Dollars.
      1,443 One Thousand Four Hundred Forty Three Dollars.
      2,452 Two Thousand Four Hundred Fifty Two Dollars.
      12,460 Twelve Thousand Four Hundred Sixty Dollars.
      22,469 Twenty Two Thousand Four Hundred Sixty Nine Dollars.
      30,000 Thirty Thousand Dollars.
      30,003 Thirty Thousand Three Dollars.
      40,000 Forty Thousand Dollars.
      50,009 Fifty Thousand Nine Dollars.
      7,000,015 Seven Million Fifteen Dollars.
      7,001,015 Seven Million One Thousand Fifteen Dollars.
    1 One Dollar.
    109.01 One Hundred Nine Dollars and One Cents.
    218.02 Two Hundred Eighteen Dollars and Two Cents.
    326.08 Three Hundred Twenty Six Dollars and Eight Cents.
    435.09 Four Hundred Thirty Five Dollars and Nine Cents.
    1,043.10 One Thousand Forty Three Dollars and Ten Cents.
    2,052.91 Two Thousand Fifty Two Dollars and Ninety One Cents.
    12,060.00 Twelve Thousand Sixty Dollars.
    22,069.01 Twenty Two Thousand Sixty Nine Dollars and One Cents.
    30,010.02 Thirty Thousand Ten Dollars and Two Cents.
    30,013.08 Thirty Thousand Thirteen Dollars and Eight Cents.
    7,001,005.11 Seven Million One Thousand Five Dollars and Eleven Cents.
    7,001,015.11 Seven Million One Thousand Fifteen Dollars and Eleven Cents.
  102.1333 One Hundred Two Dollars and Thirteen Cents and Three Three.
  102.2536 One Hundred Two Dollars and Twenty Five Cents and Three Six.
  102.9042 One Hundred Two Dollars and Ninety Cents and Four Two.
  110.1351 One Hundred Ten Dollars and Thirteen Cents and Five One.
  200.1354 Two Hundred Dollars and Thirteen Cents and Five Four.
1 One franc.
109 One Hundred Nine franc's.


Sheet1
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 E1 =NUM2DOLLAR(D1) One Dollar.
2   E1  셀의 수식을 여기에 복사하세요 -→ E1:E15    
3 E16 =NUM2DOLLAR(C16) One Dollar.
4   E16  셀의 수식을 여기에 복사하세요 -→ E16:E28    
5 E29 =NUM2DOLLAR(B29) One Hundred Two Dollars and
Thirteen Cents and Three Three.
6   E29  셀의 수식을 여기에 복사하세요 -→ E29:E33    
7 E34 =NUM2DOLLAR(A34,"franc") One franc.
8   E34  셀의 수식을 여기에 복사하세요 -→ E34:E35    

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일을 참조하시거나, 원하는 부분을 시트(셀)에 붙여 넣으세요.

     도움이 되시기를 바랍니다.
수식에 사용자 정의 함수가 있습니다. 다른 파일에서는 안 될 수 있습니다.
  주) 사용자 정의 함수를 많은 셀에 사용하면 버벅거릴 수 있습니다.
사용자 정의 함수를 사용했던 영역은 그 영역을 복사한 다음
편집/메뉴에서 선택하여 붙여넣기를 선택, 값으로 변환하는 것이 좋습니다.사용자 함수 만들기 입니다. [ 클릭 ]


Option Explicit

Function NUM2DOLLAR(WhatsNumber As Double, Optional MoneyType As String = "Dollar")' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date : 2008-09-09
Dim iLoop As Integer               'Loop
Dim CommaNumbr(1 To 5) As String   'Share by 3 Digit
Dim StrngNum_1 As String           'String Number to Format 000 000...
Dim StrngNum_2 As String           'String Number of Decimal
Dim WorkNumber As Variant          '000 000... Split
Dim NumInt     As String           'Number Integer
Dim NumDec     As String           'Decimal Number
Dim PosDot     As Integer
Dim PosDec     As Integer
Dim DecCent    As String

On Error Resume Next
     CommaNumbr(1) = " Trillion ": CommaNumbr(2) = " Billion "
     CommaNumbr(3) = " Million ":  CommaNumbr(4) = " Thousand "
     
PosDot = InStr(WhatsNumber, ".")

If WhatsNumber = 0 Then
          NUM2DOLLAR = "No Dollar."
     If MoneyType <> "Dollar" Then
          NUM2DOLLAR = Replace(NUM2DOLLAR, "Dollar", MoneyType)
     End If
          Exit Function
ElseIf WhatsNumber = 1 Then
          NUM2DOLLAR = "One Dollar."
     If MoneyType <> "Dollar" Then
          NUM2DOLLAR = Replace(NUM2DOLLAR, "Dollar", MoneyType)
     End If
          Exit Function

End If

If PosDot = 0 Then
     StrngNum_1 = Format(WhatsNumber, " 000 000 000 000 000")
Else
     StrngNum_1 = Format(Left(WhatsNumber, PosDot - 1), " 000 000 000 000 000")
     StrngNum_2 = Mid(WhatsNumber, PosDot + 1)
     PosDec = Len(StrngNum_2)
End If
     WorkNumber = Split(StrngNum_1)

For iLoop = 1 To UBound(WorkNumber)
     If WorkNumber(iLoop) <> "000" Then
     NumInt = NumInt & String_1(Left(WorkNumber(iLoop), 1)) & String_2(Right(WorkNumber(iLoop), 2)) & CommaNumbr(iLoop)
     End If
Next

If NumInt = "" Then
     NumInt = "Zero Dollar"
Else
     NumInt = NumInt & " Dollars "
End If

     If PosDot = 0 Then
          NUM2DOLLAR = NumInt
     Else
          If PosDec = 1 Then
                    NUM2DOLLAR = NumInt & " and " & String_2(StrngNum_2 & "0") & " Cents "
          ElseIf PosDec = 2 Then
                    NUM2DOLLAR = NumInt & " and " & String_2(StrngNum_2) & " Cents "
          Else
               DecCent = Left(StrngNum_2, 2)
               If DecCent = "00" Then
                    NumDec = String_2(DecCent) & " NoCent "
               Else
                    NumDec = String_2(DecCent) & " Cents and"
               End If
               For iLoop = 3 To PosDec
                    If Mid(StrngNum_2, iLoop, 1) = "0" Then
                    NumDec = NumDec & " Zero"
                    Else
                    NumDec = NumDec & " " & String_3(Mid(StrngNum_2, iLoop, 1))
                    End If
               Next
                    NumDec = NumDec & " "
                    NUM2DOLLAR = NumInt & " and " & NumDec
          End If
     End If
     
     NUM2DOLLAR = RTrim(Replace(NUM2DOLLAR, "  ", " "))
If MoneyType <> "Dollar" Then
     NUM2DOLLAR = Replace(NUM2DOLLAR, "Dollar", MoneyType & "'")
     'If Want "francs" Instead of "franc's" then
     'Use This
     'NUM2Dollar = Replace(NUM2Dollar, "Dollar", MoneyType)
End If
     NUM2DOLLAR = NUM2DOLLAR & "."
End Function         ' ___ 모듈 종료

Function String_1(MyString As String) ' 100's Number' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date :
2008-09-09
If MyString <> "0" Then
     String_1 = String_3(MyString) & " Hundred "
End If
End Function         ' ___ 모듈 종료

Function String_2(MyString As String) ' 10's Number (20-90)' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date :
2008-09-09
Select Case Left(MyString, 1)
     Case "1"
          String_2 = String_21(MyString)
          Exit Function
     Case "2": String_2 = "Twenty ":    Case "3": String_2 = "Thirty "
     Case "4": String_2 = "Forty ":     Case "5": String_2 = "Fifty "
     Case "6": String_2 = "Sixty ":     Case "7": String_2 = "Seventy "
     Case "8": String_2 = "Eighty ":    Case "9": String_2 = "Ninety "
End Select
          String_2 = String_2 & String_3(Right(MyString, 1))
End Function         ' ___ 모듈 종료

Function String_21(MyString As String) ' 10-19's Number' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date :
2008-09-09
Select Case MyString
     Case "10": String_21 = "Ten":      Case "11": String_21 = "Eleven"
     Case "12": String_21 = "Twelve":   Case "13": String_21 = "Thirteen"
     Case "14": String_21 = "Fourteen": Case "15": String_21 = "Fifteen"
     Case "16": String_21 = "Sixteen":  Case "17": String_21 = "Seventeen"
     Case "18": String_21 = "Eighteen": Case "19": String_21 = "Nineteen"
End Select
End Function         ' ___ 모듈 종료

Function String_3(MyString As String) ' 1-9's Number' === 모듈 시작
' CodeBy [ 오즈맨 ] , Date :
2008-09-09
Select Case MyString
     Case "1": String_3 = "One":        Case "2": String_3 = "Two"
     Case "3": String_3 = "Three":      Case "4": String_3 = "Four"
     Case "5": String_3 = "Five":       Case "6": String_3 = "Six"
     Case "7": String_3 = "Seven":      Case "8": String_3 = "Eight"
     Case "9": String_3 = "Nine"
End Select
End Function         ' ___ 모듈 종료
첨부파일
  
Posted by 오즈맨스머프


 [ 여러 영역의 문자열 합치기 (STRJOIN) ] 에 대해 알아봅니다.
   --->
   예제 - 1 STRJOIN (문자(영역)1, 문자(영역)2,...)
   기본연결문자 = ,
   예제 - 2 STRJOIN (문자(영역)1, 문자(영역)2, ..., 연결문자)
 
10 
11 
12 
13 
14 
15 
16 
17 
A B C D E
길동 2008년12월31일 /
삼순 0.12
태한 a
연습 b
길동,2008년12월31일,/,삼순,0.12,태한,a,연습,b
       기본 값 "," 으로 연결됩니다.
길동,2008년12월31일,/,삼순,태한,연습
       기본 값 "," 으로 연결됩니다.
길동,2008년12월31일,삼순,0.12,연습,/
       기본 값 "," 으로 연결됩니다.
길동/2008년12월31일/삼순/0.12/연습
       사용자 지정문자 "/" 로 연결됩니다.
길동 2008년12월31일 삼순 0.12 연습
       사용자 지정문자 " " 로 연결됩니다.
길동 , 2008년12월31일 , 삼순 , 0.12 , 연습
       사용자 지정문자 " , " 로 연결됩니다.


StrMix
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 A6 =STRJOIN(A1:E4) 길동,2008년12월31일,/,삼순,0.12,태한,a,연습,b
2 A8 =STRJOIN(1:1,A2:A4) 길동,2008년12월31일,/,삼순,태한,연습
3 A10 =STRJOIN(A1:C2,A4,E1) 길동,2008년12월31일,삼순,0.12,연습,/
4 A12 =STRJOIN(A1:C2,A4,TEXT(E1,"#")) 길동/2008년12월31일/삼순/0.12/연습
5 A14 =STRJOIN(A1:C2,A4," ") 길동 2008년12월31일 삼순 0.12 연습
6 A16 =STRJOIN(A1:C2,A4," , ") 길동 , 2008년12월31일 , 삼순 , 0.12 , 연습

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일이 없습니다, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.

Option Explicit

Function STRJOIN(ParamArray VariantR())
Dim i As Double, j As Double
Dim AddStr     As String
Dim MaxB       As Double
Dim AnsS()     As String
Dim ChkStrN    As Double
     MaxB = UBound(VariantR)

If TypeName(VariantR(MaxB)) = "RangeThen
     AddStr = Chr(65000) & "," & Chr(65000)
Else
     AddStr = Chr(65000) & VariantR(MaxB) & Chr(65000)
     MaxB = MaxB - 1
End If

ReDim AnsS(MaxB) As String
     ChkStrN = Len(AddStr)
Dim r As Range
For i = 0 To MaxB
     If TypeName(VariantR(i)) = "RangeThen
     If VariantR(i).Count > 1 Then
          Set r = VariantR(i)
          AnsS(i) = MVV(r, AddStr)
          Else
          AnsS(i) = VariantR(i)
          End If
     Else
          AnsS(i) = VariantR(i)
     End If
Next
     STRJOIN = Join(AnsS, AddStr)
If InStr(STRJOIN, AddStr) = 1 Then
STRJOIN = Mid(STRJOIN, ChkStrN + 1)
ElseIf Right(STRJOIN, ChkStrN) = AddStr Then
STRJOIN = Left(STRJOIN, Len(STRJOIN) - ChkStrN)
End If
     STRJOIN = Replace(STRJOIN, Chr(65000), "")
End Function

Function MVV(tmpV As Range, tmpStr As String)
Dim ii As Double
Dim jj As Double
Dim kk As Double
Dim LB1 As Double, LB2 As Double
Dim AnsY
LB1 = tmpV.Rows.Count
LB2 = tmpV.Columns.Count
ReDim AnsY(1 To 1)
     For ii = 1 To LB1
     For jj = 1 To LB2
          If CStr(tmpV(ii, jj)) <> "" Then
               kk = kk + 1
               ReDim Preserve AnsY(1 To kk)
               AnsY(kk) = tmpV(ii, jj).Text
          End If
     Next
     Next
MVV = Join(AnsY, tmpStr)
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요
Posted by 오즈맨스머프


 [ 2007 의 SUMIFS 를 대신하는 SUMIFS2003 ] 에 대해 알아봅니다.
   SUMIFS2003(합계영역, 영역,조건, 영역,조건, 영역,조건...) 으로 입력합니다.
 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
A B C G H I
성명 출장지 수당 조건1 조건2 조건3
길동이 서울 100 길동이 서울 200
삼순이 부산 110 합계 비교결과
만식이 제주 120 320 320 TRUE
꺽정이 서울 130 320 320 TRUE
길동이 부산 140 0 0 TRUE
삼순이 제주 150 500 500 TRUE
만식이 서울 160 500 500 TRUE
꺽정이 부산 170 0 0 TRUE
길동이 제주 180 460 460 TRUE
삼순이 서울 190 460 460 TRUE
만식이 부산 200 0 0 TRUE
꺽정이 제주 210 320 320 TRUE
길동이 서울 220 320 320 TRUE
삼순이 부산 230 420 420 TRUE
꺽정이 부산 290 420 420 TRUE
2600


Ifs_K
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 C26 =SUM(C11:C25) 2600
2 G13 =SUMPRODUCT(($A$11:$A$25=G11)*($B$11:$B$25=H11),$C$11:$C$25) 320
3 G14 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25="서울"),$C$11:$C$25) 320
4 G15 =SUMPRODUCT(($A$11:$A$25="=G11")*($B$11:$B$25="=H11"),$C$11:$C$25) 0
5 G16 =SUMPRODUCT(($A$11:$A$25=G11)*($B$11:$B$25>=H11),$C$11:$C$25) 500
6 G17 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25>="서울"),$C$11:$C$25) 500
7 G18 =SUMPRODUCT(($A$11:$A$25="=G11")*($B$11:$B$25>="=H11"),$C$11:$C$25) 0
8 G19 =SUMPRODUCT(($A$11:$A$25=G11)*($B$11:$B$25< =H11),$C$11:$C$25) 460
9 G20 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25< ="서울"),$C$11:$C$25) 460
10 G21 =SUMPRODUCT(($A$11:$A$25="=G11")*($B$11:$B$25< ="=H11"),$C$11:$C$25) 0
11 G22 =SUMPRODUCT(($A$11:$A$25=G11)*($B$11:$B$25< >H11),$C$11:$C$25) 320
12 G23 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25< >"서울"),$C$11:$C$25) 320
13 G24 =SUMPRODUCT(($A$11:$A$25=G11)*($C$11:$C$25< =200),$C$11:$C$25) 420
14 G25 =SUMPRODUCT(($A$11:$A$25=G11)*($C$11:$C$25< =I11),$C$11:$C$25) 420
15 H13 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,G11,$B$11:$B$25,H11) 320
16 H14 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"길동이",$B$11:$B$25,"서울") 320
17 H15 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"=G11",$B$11:$B$25,"=H11") 0
18 H16 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,G11,$B$11:$B$25,">="&H11) 500
19 H17 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"길동이",$B$11:$B$25,">=서울") 500
20 H18 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"=G11",$B$11:$B$25,">="&"H11") 0
21 H19 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,G11,$B$11:$B$25,"< ="&H11) 460
22 H20 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"길동이",$B$11:$B$25,"< =서울") 460
23 H21 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"=G11",$B$11:$B$25,"< ="&"H11") 0
24 H22 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,G11,$B$11:$B$25,"< >"&H11) 320
25 H23 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"길동이",$B$11:$B$25,"< >서울") 320
26 H24 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,G11,$C$11:$C$25,"< =200") 420
27 H25 =SUMIFS2003($C$11:$C$25,$A$11:$A$25,"길동이",$C$11:$C$25,"< ="&I11) 420
28 I13 =G13=H13 TRUE
29   I13  셀의 수식을 여기에 복사하세요 -→ I13:I25

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.  
   첨부파일이 없습니다, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.
   ※ 만일 수식에 사용된 공백때문에 오류(다른 값)가 나오면 공백을 확인바랍니다.


2007 의 SUMIFS 를 대신하는 SUMIFS2003
SUMIFS2003(합계영역, 영역,조건, 영역,조건, 영역,조건...) 으로 입력합니다.

Function SUMIFS2003(sumarr As Range, ParamArray var() As Variant)
On Error Resume Next
Dim i7 As Double, LB As Double, UB As Double
Dim adr As Variant
     LB = LBound(var)
     UB = UBound(var)
If UB Mod 2 = 0 Then
     SUMIFS2003 = "Sum / Condition1,2 / 3,4"
     Exit Function
End If
ReDim adr(LB To UB)
For i7 = LB To UB Step 2
     adr(i7) = RT(var(i7), var(i7 + 1))
Next
     adr(0) = RT(sumarr, "") & adr(0)
     
SUMIFS2003 = "=SUMPRODUCT(--(" & Join(adr, "),--(") & ")"
For i7 = LB To UB
     SUMIFS2003 = Replace(SUMIFS2003, "--(),", "")
Next
     SUMIFS2003 = Replace(SUMIFS2003, ",--()", ")")
     SUMIFS2003 = Application.Evaluate(SUMIFS2003)
End Function


Function RT(vv, cc)
On Error Resume Next
RT = Application.Evaluate(cc)
If CStr(cc) = "" Then
          RT = "" & vv.Address(External:=True) & "),--("
Else
     If Not (IsError(RT)) Then
          If IsEmpty(RT) Then
               RT = vv.Address(External:=True) & "=""" & cc & """"
          ElseIf IsNumeric(RT) Then
               RT = vv.Address(External:=True) & "=" & cc
          ElseIf IsDate(RT) Then
               RT = vv.Address(External:=True) & "=" & cc
          ElseIf TypeName(Range(cc)) = "Range" Then
               If IsNumeric(RT) Then
                    RT = vv.Address(External:=True) & "=" & cc
               Else
                    RT = vv.Address(External:=True) & "=""" & cc & """"
               End If
          Else
               If IsNumeric(RT) Then
                    RT = vv.Address(External:=True) & RT
               ElseIf IsDate(RT) Then
                    RT = vv.Address(External:=True) & RT
               Else
                    RT = vv.Address(External:=True) & "=""" & RT & """"
               End If
          End If
     Else
     Select Case RT
          Case CVErr(xlErrDiv0):   GoTo ers
          Case CVErr(xlErrNA):     GoTo ers
          Case CVErr(xlErrName):   GoTo ers
          Case CVErr(xlErrNull):   GoTo ers
          Case CVErr(xlErrNum):    GoTo ers
          Case CVErr(xlErrRef):    GoTo ers
          Case CVErr(xlErrValue):  GoTo ers
     End Select
     End If
End If
Exit Function
ers:
If Err.Number = 13 Then
     RT = "--(" & vv.Address(External:=True) & "),"""" & cc & """""
Else
     If IsNumeric(cc) Then
          RT = vv.Address(External:=True) & "=" & cc
     Else
          RT = vv.Address(External:=True) & GetRT(cc)
     End If
End If
End Function

Function GetRT(RTstr)
Dim RTtemp1     As String
Dim RTtemp2    As String
Dim RTLeft     As String
     RTLeft = Left(RTstr, 1)
     RTtemp1 = Mid(RTstr, 2)
     RTtemp2 = Mid(RTtemp1, 2)
If IsNumeric(RTtemp1) Then
ElseIf IsDate(RTtemp1) Then
Else
     RTtemp1 = """" & RTtemp1 & """"
End If

If IsNumeric(RTtemp2) Then
ElseIf IsDate(RTtemp2) Then
Else
     RTtemp2 = """" & RTtemp2 & """"
End If

Select Case Left(RTstr, 2)
Case ">=":     GetRT = ">=" & RTtemp2
Case "=>":     GetRT = ">=" & RTtemp2
Case "<=":     GetRT = "<=" & RTtemp2
Case "=<":     GetRT = "<=" & RTtemp2
Case "<>":     GetRT = "<>" & RTtemp2
Case Else
     Select Case RTLeft
     Case "=": GetRT = "=" & RTtemp1
     Case ">": GetRT = ">" & RTtemp1
     Case "<": GetRT = "<" & RTtemp1
     Case Else
          If IsNumeric(RTstr) Then
               GetRT = "=" & RTstr
          Else
               GetRT = "=""" & RTstr & """"
          End If
     End Select
End Select
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요
Posted by 오즈맨스머프


 [ 2007 의 COUNTIFS 를 대신하는 COUNTIFS2003 ] 에 대해 알아봅니다.
   COUNTIFS2003(영역,조건, 영역,조건, 영역,조건...) 으로 입력합니다.
 
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
A B C D E F
성명 출장지 수당 조건1 조건2 조건3
길동이 서울 100 길동이 서울 200
삼순이 부산 110 개수 비교결과
만식이 제주 120 2 2 TRUE
꺽정이 서울 130 2 2 TRUE
길동이 부산 140 0 0 TRUE
삼순이 제주 150 3 3 TRUE
만식이 서울 160 3 3 TRUE
꺽정이 부산 170 0 0 TRUE
길동이 제주 180 3 3 TRUE
삼순이 서울 190 3 3 TRUE
만식이 부산 200 0 0 TRUE
꺽정이 제주 210 2 2 TRUE
길동이 서울 220 2 2 TRUE
삼순이 부산 230 3 3 TRUE
꺽정이 부산 290 3 3 TRUE
2600


Ifs_K
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 C26 =SUM(C11:C25) 2600
2 D13 =SUMPRODUCT(($A$11:$A$25=D11)*($B$11:$B$25=E11)) 2
3 D14 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25="서울")) 2
4 D15 =SUMPRODUCT(($A$11:$A$25="=D11")*($B$11:$B$25="=E11")) 0
5 D16 =SUMPRODUCT(($A$11:$A$25=D11)*($B$11:$B$25>=E11)) 3
6 D17 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25>="서울")) 3
7 D18 =SUMPRODUCT(($A$11:$A$25="=D11")*($B$11:$B$25>="=E11")) 0
8 D19 =SUMPRODUCT(($A$11:$A$25=D11)*($B$11:$B$25< =E11)) 3
9 D20 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25< ="서울")) 3
10 D21 =SUMPRODUCT(($A$11:$A$25="=D11")*($B$11:$B$25< ="=E11")) 0
11 D22 =SUMPRODUCT(($A$11:$A$25=D11)*($B$11:$B$25< >E11)) 2
12 D23 =SUMPRODUCT(($A$11:$A$25="길동이")*($B$11:$B$25< >"서울")) 2
13 D24 =SUMPRODUCT(($A$11:$A$25=D11)*($C$11:$C$25< =200)) 3
14 D25 =SUMPRODUCT(($A$11:$A$25=D11)*($C$11:$C$25< =F11)) 3
15 E13 =COUNTIFS2003($A$11:$A$25,D11,$B$11:$B$25,E11) 2
16 E14 =COUNTIFS2003($A$11:$A$25,"길동이",$B$11:$B$25,"서울") 2
17 E15 =COUNTIFS2003($A$11:$A$25,"=D11",$B$11:$B$25,"=E11") 0
18 E16 =COUNTIFS2003($A$11:$A$25,D11,$B$11:$B$25,">="&E11) 3
19 E17 =COUNTIFS2003($A$11:$A$25,"길동이",$B$11:$B$25,">=서울") 3
20 E18 =COUNTIFS2003($A$11:$A$25,"=D11",$B$11:$B$25,">="&"E11") 0
21 E19 =COUNTIFS2003($A$11:$A$25,D11,$B$11:$B$25,"< ="&E11) 3
22 E20 =COUNTIFS2003($A$11:$A$25,"길동이",$B$11:$B$25,"< =서울") 3
23 E21 =COUNTIFS2003($A$11:$A$25,"=D11",$B$11:$B$25,"< ="&"E11") 0
24 E22 =COUNTIFS2003($A$11:$A$25,D11,$B$11:$B$25,"< >"&E11) 2
25 E23 =COUNTIFS2003($A$11:$A$25,"길동이",$B$11:$B$25,"< >서울") 2
26 E24 =COUNTIFS2003($A$11:$A$25,D11,$C$11:$C$25,"< =200") 3
27 E25 =COUNTIFS2003($A$11:$A$25,"길동이",$C$11:$C$25,"< ="&F11) 3
28 F13 =D13=E13 TRUE
29   F13  셀의 수식을 여기에 복사하세요 -→ F13:F25

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.  
   첨부파일이 없습니다, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.
   ※ 만일 수식에 사용된 공백때문에 오류(다른 값)가 나오면 공백을 확인바랍니다.


2007 의 COUNTIFS 를 대신하는 COUNTIFS2003
COUNTIFS2003(영역,조건, 영역,조건, 영역,조건...) 으로 입력합니다.

Function COUNTIFS2003(ParamArray var() As Variant)
On Error Resume Next
Dim i7 As Double, LB As Double, UB As Double
Dim adr As Variant
     LB = LBound(var)
     UB = UBound(var)
If UB Mod 2 = 0 Then
     COUNTIFS2003 = "Condition1,2 / 3,4"
     Exit Function
End If
ReDim adr(LB To UB)
For i7 = LB To UB Step 2
     adr(i7) = RT(var(i7), var(i7 + 1))
Next
     
COUNTIFS2003 = "=SUMPRODUCT(--(" & Join(adr, "),--(") & ")"
For i7 = LB To UB
     COUNTIFS2003 = Replace(COUNTIFS2003, "--(),", "")
Next
     COUNTIFS2003 = Replace(COUNTIFS2003, ",--()", ")")
     COUNTIFS2003 = Application.Evaluate(COUNTIFS2003)
End Function



Function RT(vv, cc)
On Error Resume Next
RT = Application.Evaluate(cc)
If CStr(cc) = "" Then
          RT = "" & vv.Address(External:=True) & "),--("
Else
     If Not (IsError(RT)) Then
          If IsEmpty(RT) Then
               RT = vv.Address(External:=True) & "=""" & cc & """"
          ElseIf IsNumeric(RT) Then
               RT = vv.Address(External:=True) & "=" & cc
          ElseIf IsDate(RT) Then
               RT = vv.Address(External:=True) & "=" & cc
          ElseIf TypeName(Range(cc)) = "Range" Then
               If IsNumeric(RT) Then
                    RT = vv.Address(External:=True) & "=" & cc
               Else
                    RT = vv.Address(External:=True) & "=""" & cc & """"
               End If
          Else
               If IsNumeric(RT) Then
                    RT = vv.Address(External:=True) & RT
               ElseIf IsDate(RT) Then
                    RT = vv.Address(External:=True) & RT
               Else
                    RT = vv.Address(External:=True) & "=""" & RT & """"
               End If
          End If
     Else
     Select Case RT
          Case CVErr(xlErrDiv0):   GoTo ers
          Case CVErr(xlErrNA):     GoTo ers
          Case CVErr(xlErrName):   GoTo ers
          Case CVErr(xlErrNull):   GoTo ers
          Case CVErr(xlErrNum):    GoTo ers
          Case CVErr(xlErrRef):    GoTo ers
          Case CVErr(xlErrValue):  GoTo ers
     End Select
     End If
End If
Exit Function
ers:
If Err.Number = 13 Then
     RT = "--(" & vv.Address(External:=True) & "),"""" & cc & """""
Else
     If IsNumeric(cc) Then
          RT = vv.Address(External:=True) & "=" & cc
     Else
          RT = vv.Address(External:=True) & GetRT(cc)
     End If
End If
End Function

Function GetRT(RTstr)
Dim RTtemp1     As String
Dim RTtemp2    As String
Dim RTLeft     As String
     RTLeft = Left(RTstr, 1)
     RTtemp1 = Mid(RTstr, 2)
     RTtemp2 = Mid(RTtemp1, 2)
If IsNumeric(RTtemp1) Then
ElseIf IsDate(RTtemp1) Then
Else
     RTtemp1 = """" & RTtemp1 & """"
End If

If IsNumeric(RTtemp2) Then
ElseIf IsDate(RTtemp2) Then
Else
     RTtemp2 = """" & RTtemp2 & """"
End If

Select Case Left(RTstr, 2)
Case ">=":     GetRT = ">=" & RTtemp2
Case "=>":     GetRT = ">=" & RTtemp2
Case "<=":     GetRT = "<=" & RTtemp2
Case "=<":     GetRT = "<=" & RTtemp2
Case "<>":     GetRT = "<>" & RTtemp2
Case Else
     Select Case RTLeft
     Case "=": GetRT = "=" & RTtemp1
     Case ">": GetRT = ">" & RTtemp1
     Case "<": GetRT = "<" & RTtemp1
     Case Else
          If IsNumeric(RTstr) Then
               GetRT = "=" & RTstr
          Else
               GetRT = "=""" & RTstr & """"
          End If
     End Select
End Select
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요
Posted by 오즈맨스머프


 [ 2007 의 IFERROR 를 대신하는 IFERROR2003 ] 에 대해 알아봅니다.
   =IF(수식,오류일때,수식) 을 =IFERROR2003(수식,오류일때) 로 사용 가능합니다.
 
A B C D E F
성명 연락처 찾기 결과
길동이 101 길동이 101 101
삼순이 304 만수 없음 없음
만식이 502 삼순이 304 304


Sheet3
시트 에 사용한 수식
입니다. by MicroSoft Excel v 2003
   $ 가 있는 수식은 절대(혼합)참조로 셀 주소를 고정합니다. 참조하세요!!
No 셀주소 왼쪽의 셀에 수식을 넣으면 오른쪽 결과가 나옵니다.
(복사)를 누르면 셀의 수식이 클립보드(메모리)로 복사되는데,
익스플로러의 종류에 따라 (복사)가 작동이 안 될 수 있습니다.
결과 수식을
1 E2 =IF(ISERROR(VLOOKUP(D2,$A$2:$B$4,2,0)),"없음",VLOOKUP(D2,$A$2:$B$4,2,0)) 101
2   E2  셀의 수식을 여기에 복사하세요 -→ E2:E4
3 F2 =IFERROR2003(VLOOKUP(D2,$A$2:$B$4,2,0),"없음") 101
4   F2  셀의 수식을 여기에 복사하세요 -→ F2:F4

   보시는 내용은 위의 표에 값이, 아래의 표에는 해당 셀의 수식이 있습니다.   
   첨부파일이 없습니다, 원하는 부분을 시트(셀)에 붙여 넣으세요.
     도움이 되시기를 바랍니다.

Function IFERROR2003(WriteFormula, WriteAnswer)
Dim Answ As Variant
On Error Resume Next
Answ = Application.Evaluate(WriteFormula)
If Not (IsError(Answ)) Then
     IFERROR2003 = Answ
Else
Select Case Answ
     Case CVErr(xlErrDiv0):   IFERROR2003 = WriteAnswer
     Case CVErr(xlErrNA):     IFERROR2003 = WriteAnswer
     Case CVErr(xlErrName):   IFERROR2003 = WriteAnswer
     Case CVErr(xlErrNull):   IFERROR2003 = WriteAnswer
     Case CVErr(xlErrNum):    IFERROR2003 = WriteAnswer
     Case CVErr(xlErrRef):    IFERROR2003 = WriteAnswer
     Case CVErr(xlErrValue):  IFERROR2003 = WriteAnswer
     Case Else:               IFERROR2003 = Answ
End Select
End If
End Function

잘 안될 경우 메일 주시거나 리플 남겨주세요
Posted by 오즈맨스머프