VBA – 索引/匹配function与多个标准

当试图在VBA中编译多条件索引/匹配代码时,我遇到了一个问题。 这可能很简单 – 但我相当新的VBA,没有发现这里工作。

示例:我在指定范围内有大量数据: Sheets("CustomerAccounts").Range(CustomerSheetRange)) – 我需要VBA通过检查三个标准来返回标题为“Values”的列的数据:Customer = X,Type =外部,OriginCountry = UAE(列在原始电子表格中不相邻)标准存储在由macros用户预先设置的单独variables中。

 Customer | Type | Origin | Destination | Values X | Internal | UAE | SA | Value 1 Y | Internal | UAE | SA | Value 2 X | External | UAE | SA | Value 3 X | External | ZA | UAE | Value 4 

目前我有以下(相当庞大)的代码,它使用一个标准 – OriginCountryvariables来查找值。 代码在一个预先指定的列中search它 – OriginCountryColumn。

 ResultString = Application.Index(Sheets("CustomerAccounts").Range(CustomerSheetRange), Application.Match(OriginCountry, Sheets("CustomerAccounts").Range(OriginCountryColumn), 0), Application.Match("Values", Sheets("CustomerAccounts").Range(TitleRowCust), 0)) 

我想修改代码来匹配types和客户。 是否有可能扩大上述指数/ Matxh函数 – 或者我应该使用不同的方法?

任何意见表示赞赏。

你可以通过检查匹配的行来遍历:

 Dim row as Long With Sheets("CustomerAccounts").Range(CustomerSheetRange)) For row = 2 To .Rows.Count 'Starts in 2 to ignore header! If .Cells(row, costumerCol).Value Like costumerCriteria And .Cells(row, typeCol).Value Like typeCriteria And .Cells(row, originCol).Value Like originCriteria Then 'This is a match! Debug.Print .Cells(row, valueCol) End if Next End With 

您必须用指定的条件将costumerColtypeColoriginColvalueCol为相应的列号和costumerCriteriatypeCriteriaoriginCriteria

如果列索引也是可变的,则在遍历行之前在第一行中进行search。

首先,将包含数据的范围设置为表(请参阅http://office.microsoft.com/zh-cn/excel-help/quick-start-create-an-excel-table-HA010359200.aspx关于如何操作那)。 完成后,使用下面的VBA代码:

 SomeCustomer = Range("...").Value SomeType = Range("...").Value SomeOrigin = Range("...").Value ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria=SomeCustomer ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=2, Criteria=SomeType ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=3, Criteria=SomeOrigin 

笔记:

  • 您可能必须根据您的特定需求自定义此macros
  • 表的名称可以通过公式>名称pipe理器find/修改
  • ActiveSheet可能会修改为您正在使用的实际工作表