VBA - 具有多个标准的索引/匹配功能

时间:2013-08-27 10:20:56

标签: excel vba excel-vba

我在尝试在VBA中编译多条件索引/匹配代码时遇到问题。这可能很简单 - 但我对VBA来说相当新,而且我在这里找不到任何工作。

实施例: 我在指定范围内有大量数据:Sheets("CustomerAccounts").Range(CustomerSheetRange)) - 我需要VBA通过检查三个条件从标题为“值”的列返回数据:Customer = X,Type = External,OriginCountry = UAE(列不是在原始电子表格中相邻) 标准存储在由宏的用户预先设置的单独变量中。

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

目前我有以下(相当庞大的)代码,它使用一个标准找到值 - OriginCountry变量。 代码在预先指定的列中搜索它 - OriginCountryColumn。

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

我想修改代码以匹配Type和客户。 是否有可能扩展上述索引/ Matxh函数 - 或者我应该使用不同的方法吗?

感谢任何建议。

2 个答案:

答案 0 :(得分:3)

您可以浏览行检查匹配项:

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替换为相应的列号和costumerCriteriatypeCriteria和{{1} }指定标准。

如果列索引也是可变的,请在遍历行之前在第一行搜索它们。

答案 1 :(得分:0)

首先,将包含数据的范围格式化为表格(有关如何执行此操作,请参阅http://office.microsoft.com/en-001/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

注意:

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