Vba 如何在自动筛选范围内找到最小值?
我有一个列,有两个值范围,特别是0-30000和60000+,我需要从中提取60000范围内最小的两个值 到目前为止,我找到的唯一方法是使用Vba 如何在自动筛选范围内找到最小值?,vba,sorting,excel,Vba,Sorting,Excel,我有一个列,有两个值范围,特别是0-30000和60000+,我需要从中提取60000范围内最小的两个值 到目前为止,我找到的唯一方法是使用AutoFilter生成要提取的所需数据子集。我的问题是Autofilter函数不返回对某个范围的引用。如果有,我可以使用SMALL函数来获取我要查找的值 如何从过滤后的数据中过滤和提取两个最小值?我放弃了使用自动过滤的想法。相反,我使用了SMALL和循环的组合 Cells(2, secIdCol).Select Set valsRange = Range(
AutoFilter
生成要提取的所需数据子集。我的问题是Autofilter函数不返回对某个范围的引用。如果有,我可以使用SMALL
函数来获取我要查找的值
如何从过滤后的数据中过滤和提取两个最小值?我放弃了使用自动过滤的想法。相反,我使用了
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
单元格(2,secIdCol)。选择
设置valsRange=范围(选择,选择.结束(xlDown))
对于valsRange中的每个val
如果值<599999,则
val.Value=”“//我不保存更改
val1=Application.WorksheetFunction.Small(valsRange,1)
val2=Application.WorksheetFunction.Small(valsRange,2)
如果结束
下一个val
我放弃了使用自动筛选的想法。相反,我使用了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
单元格(2,secIdCol)。选择
设置valsRange=范围(选择,选择.结束(xlDown))
对于valsRange中的每个val
如果值<599999,则
val.Value=”“//我不保存更改
val1=Application.WorksheetFunction.Small(valsRange,1)
val2=Application.WorksheetFunction.Small(valsRange,2)
如果结束
下一个val
我认为您不一定需要VBA。您是否考虑过使用ctrl+shift输入的数组公式:
=MIN(IF(A1:A7>2999,A1:A7))
我认为你不一定需要VBA。您是否考虑过使用ctrl+shift输入的数组公式:
=MIN(IF(A1:A7>2999,A1:A7))
这里有一种不使用
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
与工作表(“表1”)
最后一排一样长
lastRow=.Cells(2,secIdCol).CurrentRegion.Rows.Count+1
变暗,变长
将当前值变长
暗淡的val1一样长
昏暗的山谷2一样长
'将val1设置为可能的最大长值
val1=2147483647
对于rowIndex=2到lastRow
currentValue=CLng(.Cells(rowIndex,secIdCol).Value)
如果(当前值>59999),则
如果(当前值<值1),则
val2=val1
val1=当前值
如果结束
如果结束
下一行索引
以
MsgBox val1&“|”和val2
这里有一种不同的方法,不使用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
与工作表(“表1”)
最后一排一样长
lastRow=.Cells(2,secIdCol).CurrentRegion.Rows.Count+1
变暗,变长
将当前值变长
暗淡的val1一样长
昏暗的山谷2一样长
'将val1设置为可能的最大长值
val1=2147483647
对于rowIndex=2到lastRow
currentValue=CLng(.Cells(rowIndex,secIdCol).Value)
如果(当前值>59999),则
如果(当前值<值1),则
val2=val1
val1=当前值
如果结束
如果结束
下一行索引
以
MsgBox val1&“|”和val2
Nope,主要原因是我将其用作更大的数据清理宏的一部分。另一个需要注意的方面是,我正在寻找600000范围内的两个最小值。atm公式将返回300000范围内的最小值,主要原因是我使用它作为更大数据清理宏的一部分。另一个需要注意的方面是,我正在寻找600000范围内的两个最小值。atm公式将返回300000范围内的最小值