2016-12-30 64 views
0

我正在寻找一种方法来生成具有两个给定范围值的集合。vba-查找具有多个范围值的集合

例如,在我的代码,我有以下几点:

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函数不是我正在寻找的,因为它只需要两个参数,其余的代码也不会有意义,如果我使用它(偏移量将不起作用)。

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

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

+1

为什么不使用过滤器,然后可见复制到另一个表。然后,您可以搜索该数据集为您的最低。 –

+0

@Scott Craner:哦,这是一个伟大而简单的想法:)将尝试!我想我是在过度复杂的问题。非常感谢 – Rose

回答

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