我在尝试在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函数 - 或者我应该使用不同的方法吗?
感谢任何建议。
答案 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
您必须将costumerCol
,typeCol
,originCol
和valueCol
替换为相应的列号和costumerCriteria
,typeCriteria
和{{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
注意: