[ 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 오즈맨스머프