VBA - 小计给出一个列的最小值,我如何得到该值的行?

时间:2016-03-28 00:38:59

标签: excel excel-vba vba

请你帮我找出如何找到小计给我的最小值的行?

像这样:

    A           B          C        D       E       F       G
1  Galp         He        0,15     125                   0,15443
3  Iberdrola    Au        0,18     123                   0,16987
7  Gazprom      Sc        0,25     430                   0,14679

我运行代码以在过滤的列G上找到最小值:

Application.WorksheetFunction.Subtotal(5, Columns("G"))

它为我提供了数字0,14679。但是我需要知道它是什么行,所以我可以在A列(Gazprom)上得到名称。

Vlookup在这种情况下不起作用,因为我有多个具有相同特征的值。但它们并不像上面的例子那样可见。不可见的第二行具有与第3行(0,16987)相同的值。

然而,根据@Mrig的建议,如果我使用小计105,我可以获得可见列吗?

我一直在尝试代码,它返回错误13 ...

如何在过滤列G的最小值A的行A上找到名称?

2 个答案:

答案 0 :(得分:0)

您只需要搜索所需值的可见项目。像这样的东西

Sub FindMin()
    Dim rng As Range, arr As Range, cl As Range
    Dim SearchTerm As Variant, LookUpTerm  As Variant
    Dim Found As Boolean

    SearchTerm = Application.WorksheetFunction.Subtotal(5, Columns("A"))

    With ActiveSheet
        Set rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With

    For Each arr In rng.Areas
        For Each cl In arr.Cells
            If cl.Value = SearchTerm Then
                LookUpTerm = cl.Offset(, 1) ' adjust offset to refer to required column
                Found = True
                Exit For
            End If
        Next cl
        If Found Then Exit For
    Next arr

查找 First Visible 实例

原始答案,没有过滤要求

要回答您的直接问题“如何获取行......”请使用

rw = Application.Match(Application.WorksheetFunction.Subtotal(5, Columns("A")), Columns("A"), 0)

要直接使用

从列B获取值
ColBVal = Application.VLookup(Application.WorksheetFunction.Subtotal(5, Columns("A")), Columns("A:B"), 2, 0)

请注意,如果最小值出现多次,则会返回第一次出现。

答案 1 :(得分:0)

试试这个:

Sub Demo()
    Dim min As Double
    Dim rowNum As Long

    With Sheet3
        min = Application.WorksheetFunction.Subtotal(5, Columns("A"))
        rowNum = .Columns(1).Find(What:=min, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Row
        MsgBox ("Minimum value is " & min & " at row number " & rowNum & ". Corresponding column B value is " & Cells(rowNum, 2).Value)
    End With
End Sub

5作为功能编号的小计将从所选范围(包括隐藏行)中给出最小值。 105作为功能编号的小计仅从可见范围给出最小值。