2013-08-27 197 views
1

我在嘗試編譯VBA中的多條件索引/匹配代碼時遇到了一個問題。這可能很簡單 - 但我相當新的VBA,沒有發現在這裏工作。我需要VBA從標題爲「Values」的列中返回數據,方法是檢查三個標準:Customer = X,Type = External,OriginCountry = UAE(其中,列在原始電子表格中不相鄰) 標準存儲在由宏用戶預先設置的單獨變量中。VBA - 具有多個條件的索引/匹配函數

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函數 - 或者我應該使用不同的方法?

任何意見表示讚賞。

+0

爲什麼不使用數據透視表或自動過濾器? – 2013-08-27 10:40:33

回答

3

您可以到r行走進行修改,以實際圖紙OWS檢查匹配:

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與指定的標準。

如果列索引也是可變的,請在遍歷行之前在第一行進行搜索。

+0

謝謝,這種方法只是我需要的東西。 –

+0

這是一個偉大的方法!萬分感謝。它完全取代了我的硬代碼:)這是我以前的:Range(「E15」)。FormulaArray =「= INDEX('EMPLOYEE LIST'!A:P,MATCH(1,('EMPLOYEE LIST'!A: A = D5)*('僱員名單'B:B = 15),0),12)「 – Jonh

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可能使用的是