vba-查找具有多个范围值的集合

时间:2016-12-30 04:56:00

标签: vba excel-vba find excel

我正在寻找一种生成具有两个给定范围值的Set的方法。

例如,在我的代码中,我有以下内容:

Set myList = FindAll(columnValue, Sheet2.Range("ColumnName"))
Set advisorFound = myList.Offset(, -2)

我想要的是能够使用两个范围值的FindAll,例如:

Set myList = FindAll(columnValue, Sheet2.Range("ColumnName"), anotherColumnValue, Sheet2.Range("anotherColumnName"))

但是,我知道FindAll函数不是我想要的,因为它只需要两个参数,其余的代码也没有意义,如果我正在使用它(偏移量不会和#39;工作)。

我的最终目标是:获取一组包含两个范围限制的行,我只想访问此集合中另一列中具有最小值的行(与其他行相比)发现)

我查了一下文档(https://msdn.microsoft.com/en-us/library/office/ff839746.aspx),但我似乎无法找到我要找的东西。在此先感谢,感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

您可以使用AutoFilter()

With Worksheets("Sheet2") '<--| reference your data sheet
    With .Range(.Range("ColumnName"), .Range("anotherColumnName")) '<--| reference its range ranging between two named ranges
        .AutoFilter Field:=.Parent.Range("ColumnName").Column - .Columns(1).Column + 1, Criteria1:=columnValue '<--| 1st filter on first named range
        .AutoFilter Field:=.Parent.Range("anotherColumnName").Column - .Columns(1).Column + 1, Criteria1:=anothercolumnValue '<--| 2nd filter on 2nd named range
        If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filtered cell then
            With Intersect(.Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow, .Columns(1).Offset(, -2)) '<--| reference cells two columns to the left of the lower column index named range filtered ones
                Set myList = Intersect(.Find(what:=WorksheetFunction.min(.Cells), lookat:=xlWhole, LookIn:=xlValues).EntireRow, .Parent.UsedRange) '<-- set the row "used" range with the minimum value in the referenced cells
            End With
        End If
    End With
    .AutoFilterMode = False
End With