Excel 2007 Visual Basic:最小值

时间:2011-02-15 16:33:23

标签: excel vba excel-vba excel-2007

这是样本表:

ColA,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%

我必须在 ColB 中找到 ColA 中指定值的最小值,然后检查此行中的 ColC 是否大于15% 。如果是这样 - 返回 ColB 的值。如果没有,找到下一个最小值并与之前找到的值相加,然后再次检查sum是否大于15%,依此类推。返回 ColB 的最后一个求和值。

示例( ColA =“ A ”):
1.找到 ColB 的最小值(单元格:B2,值0.2)
2.检查此行中 ColC 中的值(单元格:C2,值10%)是否大于15%(未满足!)与之前的值= 0 + 10%= 10%
3.在 ColB 中获取下一个最小值(单元格:B3,值0.3)
4.检查> 15%条件 - > (单元格:C3,值1%)总和先前val = 10%+ 1%= 11%(仍未达到)
5.在 ColB 中获取下一个最小值(单元格:B4,值0.5)
6.检查> 15%条件 - > (单元格:C4,值6%)总和先前val = 11%+ 6%= 17%(满足条件)
7.我们总结的最后一个单元格是C4,所以我们在此行中从 ColB 返回值 - 0.5

(“B”的答案是0.4)

我想要求任何提示来解决这个问题。希望很清楚;)

这是我的功能原型
Function foo(ColA As String) As Integer

1 个答案:

答案 0 :(得分: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%)