2015-01-29 2 views
0

배열에 여러 개의 x 변수가 있는데 그 중 일부는 서로 다른 y 값을 갖고 있기 때문에 반복됩니다. VBA를 사용하여 각 x 변수에 대해 최소 y 값을 얻고 싶습니다. 예를 들어 다음에서 나는배열의 다양한 요소에 대한 Minif

x y 
a 2 
a 2 
a 2 
b 1 
b 1 

가 나는 minif 후 조회 기능을 실행할 수 있습니다 싶어

x y 
a 2 
a 3 
a 4 
b 1 
b 2 

을 설정합니다. 이 작업을 수행하는 더 간단한 방법이 있습니까?

+0

VBA를 사용하고 있으므로 현재 방법을 게시 할 수 있습니까? (나는 당신이'MinIf()'부분을 어떻게하는지 궁금해.) 또한, VBA가 아닌 해결책에 관심이 있으십니까? – Smandoli

+0

아직 MinIf를 작성하지 않았지만 할 수 있습니다. 또한 http://www.bettersolutions.com/excel/EIK284/LN318711811.htm에 있습니다. 불행히도 나는 VBA만을 사용하는 제약이있다. 다른면에서는 SQL을 사용할 수있다. – earthlink

+0

또 다른 옵션은 VBA 나 SQL을 사용하지 않는 배열 수식입니다. 이것은 실제로 내 질문이었습니다 - Excel 수식이 아닌 이유는 무엇입니까? 허용되는 경우 http://superuser.com/a/764447/52833을 참조하십시오. – Smandoli

답변

1

여기에 적절한 MinIfs 기능이 있습니다. 아래에 MinIfs (최소 범위, 범위 1, 조건 범위 1 [범위 1 + i, 조건 범위 1 + i] 참조)가 만들어졌습니다.

최소값을 정의했으면 x 열의 각 셀을 반복하고 a 또는 b를 테스트 한 다음 해당 y 셀을 MinIfs 값으로 채 웁니다.

 'Define MinIfs function 
    Function MinIfs(MinRange 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 Double 
      Dim k As Double 
      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 Min range 
      For i = 1 To MinRange.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 = MinRange 

       'Were all criteria satisfied and value to be preserved is numeric? 
       If f And IsNumeric(z(i, 1)) Then 
        k = k + 1 
        ReDim Preserve w(k) 
        w(k) = z(i, 1) 
       End If 

      Next i 

      MinIfs = Application.Min(w) 

      Exit Function 

    ErrHandler: 
      MinIfs = CVErr(xlErrValue) 

     End Function 

질문이 있으시면 언제든지 문의하십시오.

Diedrich

관련 문제