2010-03-23 4 views
5

에 적당한 크기의 데이터 세트가 있는데 그 중 B 열의 값의 최대 값을 추출하고자하지만 A 열의 특정 조건을 만족하는 셀에만 해당하는 값을 추출합니다.Excel MAXIF 함수 또는 에뮬레이션?

원하는 기능은 SUMIF 또는 COUNTIF의 기능과 비슷하지만 둘 중 어느 것도 필요한 데이터를 반환하지 않습니다. MAXIF 함수가 없습니다. 어떻게 에뮬레이트하나요?

답변

5

배열 수식을 사용할 수 있습니다. 최대 계산식을 원하는 셀에서 대괄호로 값을 바꿀 위치를 If ([test], [if true], [if false]) 입력하십시오. 테스트와 함께, true의 경우 무엇을 반환하고 잘못된 경우 어떻게 돌아 예를 들면 다음과 같습니다.

=MAX(IF(MOD(A2:A25,2)=0,A2:A25,0) 

을 2로 나눈 값이 더 나머지가없는 경우 내가 열 A의 값을 반환이 공식에서 내가 사용하는 것을 알 수 있습니다. 비교할 셀의 범위와 단일 셀보다는 거짓 인 경우의 값

이제 셀을 편집하면서 Ctrl + Shift + Enter를 누릅니다 (Ctrl 키와 Shift 키를 누른 상태에서 gether 그리고 나서 Enter를 누르십시오).

이렇게하면 범위의 각 값에 대해 작동하는 배열 수식이 만들어집니다.

편집 자세히 프로그래밍 방식으로 또는 수동으로 수행 하시겠습니까? 프로그래밍 방식으로 사용하는 경우 어떤 환경을 사용하고 있습니까? VBA? 기음#?

편집 VBA를 통해, 당신이 그렇게처럼을 FormulaArray 속성과 R1C1 참조를 사용해야하는 경우 :

Range("A1").Select 
Selection.FormulaArray = "=MAX(IF(MOD(R[1]C:R[24]C,2)=0,R[1]C:R[24]C,0))" 
3

배열 수식이 잘 동적 또는 명명 된 범위를 사용하고자 할 때 작동하지 않습니다 (예를 들어, , "현재 행과 동일한 상대방을 갖는 행의 최대 금액) 배열 수식을 사용하지 않으려면 다음과 같이 VBA에 항상 의지하십시오.

Function maxIfs(maxRange As Range, criteriaRange As Range, criterion As Variant) As Variant 

    maxIfs = Empty 
    For i = 1 To maxRange.Cells.Count 
    If criteriaRange.Cells(i).Value = criterion Then 
     If maxIfs = Empty Then 
      maxIfs = maxRange.Cells(i).Value 
     Else 
      maxIfs = Application.WorksheetFunction.Max(maxIfs, maxRange.Cells(i).Value) 
     End If 
    End If 
    Next 
End Function 
1

limi 지금까지 제공된 코드를 사용하면 2 가지 조건으로 제한됩니다. MaxIfs 함수의 조건 수를 제한하지 않기 위해이 코드를 더 사용하기로 결정했습니다. 다음 코드를 참조하십시오 :

 Function MaxIfs(MaxRange As Range, ParamArray Criteria() As Variant) As Variant 
     Dim n As Long 
     Dim i As Long 
     Dim c As Long 
     Dim f As Boolean 
     Dim w() As Long 
     Dim k As Long 
     Dim z As Variant 

     'Error if less than 1 criteria 
     On Error GoTo ErrHandler 
     n = UBound(Criteria) 
     If n < 1 Then 
      'too few criteria 
      GoTo ErrHandler 
     End If 
      'Define k 
      k = 0    

     'Loop through cells of max range 
     For i = 1 To MaxRange.Count 

     'Start by assuming there is a match 
     f = True 

      'Loop through conditions 
      For c = 0 To n - 1 Step 2 

       'Does cell in criteria range match condition? 
       If Criteria(c).Cells(i).Value <> Criteria(c + 1) Then 
        f = False 
       End If 

      Next c 

      'Define z 
      z = MaxRange 

      'Were all criteria satisfied? 
      If f Then 
       k = k + 1 
       ReDim Preserve w(k) 
       w(k) = z(i, 1) 
      End If 

     Next i 

     MaxIfs = Application.Max(w) 

     Exit Function 
     ErrHandler: 
     MaxIfs = CVErr(xlErrValue) 

    End Function 

이 코드는 1 개의 조건을 허용합니다.

이 코드는 Eileen 's Lounge에서 Hans V가 게시 한 여러 코드를 참조하여 개발되었습니다.

해피

DIEDRICH

코딩