如何在AutoFilter范围内找到最小值?

时间:2010-07-28 08:46:04

标签: excel vba sorting excel-vba

我有一个包含两个值范围的列,特别是0-30000和60000+,我需要从中提取60000范围内最小的两个值。

到目前为止,我发现使用AutoFilter生成要提取的所需数据子集的唯一方法。我的问题是Autofilter函数不会返回对范围的引用。如果是这样,我可以使用SMALL函数来获取我正在寻找的值。

如何从此过滤数据中过滤和提取两个最小值?

3 个答案:

答案 0 :(得分:1)

我放弃了使用Autofilter的想法。相反,我使用了SMALL和循环的组合。

Cells(2, secIdCol).Select
Set valsRange = Range(Selection, Selection.End(xlDown))

For Each val In valsRange
    If val.Value < 599999 Then
        val.Value = "" // I don't save changes 
        val1 = Application.WorksheetFunction.Small(valsRange, 1)
        val2 = Application.WorksheetFunction.Small(valsRange, 2)
    End If
Next val

答案 1 :(得分:0)

我认为你不一定需要VBA。您是否考虑过使用ctrl + shift:

输入的数组公式
   =MIN(IF(A1:A7>2999,A1:A7))

答案 2 :(得分:0)

这是一种不使用SMALL工作表函数的不同方法:

With Worksheets("Sheet1")
    Dim lastRow As Long
    lastRow = .Cells(2, secIdCol).CurrentRegion.Rows.Count + 1

    Dim rowIndex As Long
    Dim currentValue As Long
    Dim val1 As Long
    Dim val2 As Long

    ' Set val1 to maximum possible long value
    val1 = 2147483647
    For rowIndex = 2 To lastRow
        currentValue = CLng(.Cells(rowIndex, secIdCol).Value)
        If (currentValue > 59999) Then
            If (currentValue < val1) Then
                val2 = val1
                val1 = currentValue
            End If
        End If
    Next rowIndex
End With

MsgBox val1 & " | " & val2