2011-02-15 2 views
0

샘플 시트이다 :엑셀 2007 비주얼 베이직 : 최소값 여기

콜라 COLB, COLC
A, 0.2, 10 %
A, 0.3, 1 %
A, 0.5, 6 %
B, 0.4, 9 %
B, 0.3, 8 %
B, 1.2, 40 % 나 SP의 COLB에서 최소값을 찾아야

ColA에 값을 입력하고이 행의 ColC이 15 %보다 큰지 확인하십시오. 그렇다면 ColB의 반환 값입니다. 그렇지 않은 경우 다음 최소값을 찾아 이전에 찾은 값과 합계 한 다음 합계가 15 %보다 큰지 등을 다시 확인합니다. 에서 마지막으로 합한 값을 반환합니다. ColB.

예 (콜라 = ""에 대한)
1.하기 COLB에서 최소값을 찾아 (셀 : B2, 값 0.2)
2. 값 COLC
이있는 경우 행 (셀 : C2, 값 10 %)이 이전 값과의 합이 15 %보다 큼 (일치하지 않음) 합계 : 0 + 10 % = 10 %.3)
4. 확인> 15 % 조건 -> (셀 : C3, 값 1 %) 이전과의 합계 (셀 : B4, 값 0.5)
6. 15 % 조건 -> (셀 : C4) 값을 확인하십시오. 이전 브로 = 11 % + 6 % = 17 %로, 값 6 %) 합계 (조건
7. 우리 합산 마지막 셀 C4이었다)을 충족하고 있으므로이 행 COLB
로부터 값을 반환 - 0.5

("B"에 대한 대답은 0.4입니다.)

이 문제를 해결하기위한 힌트를 요청하고 싶습니다. 그것은 분명 희망, 여기

내 함수의 프로토 타입입니다)
Function foo(ColA As String) As Integer

+1

분할)하여 시트에 맞게 'ColA'의 값에 의해'ColB'로 정렬하고,'ColC'의 누적 합계를 만들고,이 합계의 첫 번째 값을 15 % 이상 찾아서 그 요소에 대해'ColB'의 값을 취합니다. – James

답변

0
Function Foo(rng As Range, ColA As String, Target As Variant) As Variant 
    Dim Dat() As Variant 
    Dim r As Long, c As Long 
    Dim sm As Variant 

    ' Get Data from sheet 
    Dat = rng.Value2 
    ' Sort DAT on column B 
    ' <sort code here> 

    sm = 0# 

    ' Loop through rows 
    For r = LBound(Dat, 1) To UBound(Dat, 1) 
     ' If Column 1 matches 
     If Dat(r, 1) = ColA Then 
      ' sum of column 3 
      sm = sm + Dat(r, 3) 

      ' If target reached 
      If sm >= Target Then 
       ' Return result 
       Foo = Dat(r, 2) 
       Exit Function 
      End If 
     End If 
    Next 

    ' Target not reached 
    Foo = "No Answer" 

End Function 

(대체이 같은 통화 기능 $ A $ 1 : $ C $ 6

=Foo($A$1:$C$6,"A",15%) 
+0

그런 빠른 재생 주셔서 감사하지만, 불행히도 귀하의 기능이 예상대로 작동하지 않습니다. 따라서 ColB에서 최소값을 확인하지 않습니다. 내가 이해하는 바와 같이, 그것은 15 % 이상의 조건을 충족시키는 ColB의 첫 번째 합계 값을 반환합니다. 어쨌든, 당신의 도움을 주셔서 감사합니다! – monczek

+0

죄송합니다. 최소값 비트가 간과되었습니다. 이 작업을 수행하려면 B 열의 데이터를 정렬하십시오. 정렬에 도움이 필요하면 QuickSort를 검색해보십시오. 거기에 많은 예제가 있습니다 ... –

관련 문제