我有一个包含两个值范围的列,特别是0-30000和60000+,我需要从中提取60000范围内最小的两个值。
到目前为止,我发现使用AutoFilter
生成要提取的所需数据子集的唯一方法。我的问题是Autofilter函数不会返回对范围的引用。如果是这样,我可以使用SMALL
函数来获取我正在寻找的值。
如何从此过滤数据中过滤和提取两个最小值?
答案 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