1

尝试在 VBA 中编译多个标准索引/匹配代码时遇到问题。这可能很简单 - 但我对 VBA 还很陌生,我在这里发现的任何东西都没有。

示例:我在指定范围内有大量数据:Sheets("CustomerAccounts").Range(CustomerSheetRange))- 我需要 VBA 通过检查三个条件从标题为“值”的列返回数据:客户 = X、类型 = 外部、来源国 = 阿联酋(列在原始电子表格)标准存储在宏用户预先设置的单独变量中。

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))

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

任何建议表示赞赏。

4

2 回答 2

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指定的条件。valueColcostumerCriteriatypeCriteriaoriginCriteria

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

于 2013-08-27T11:10:24.457 回答
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 可能会修改为您正在使用的实际工作表
于 2013-08-27T10:37:33.387 回答