2016-12-30 38 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