2011-06-12 82 views
2

我想要從預定義列表中搜索任意單詞(標準)的描述單元格,並從相鄰單元格中獲取該項目的相關金額。使用多個字符串標準搜索Excel

爲了說明,這裏是我的設置:

A | B | C |  D | E | F | 

Date | Descr.| Amount| Cat1 | Cat2 | Cat3 | 

d,E,F:它們中的每一個都是項目類別。如果該行中的項目屬於某個類別,我希望其數量可以填充同一行中的該類別單元格。每個類別單元都有一個公式來測試這個並執行操作。

我的第一個想法是使用VLookup,但我有一個查找值列表。我一直無法成功地做到這一點。每個類別的細胞具有式這樣的 - >

=IF(SUM(COUNTIF($B10,{"*costco*","*saputo*","*t & t*"}))>0,$C10," ")

列B是指該描述,其中搜索任何的標準。如果說明中包含任何單詞,則單元格將填充C列中的數量,否則其左側將填入一個空格。

這樣做完全可以,但是我需要標準(在這種情況下,costco,saputo,t & t)是靈活的(在列表中添加或刪除字符串)而不是在公式中進行硬編碼。這是我的問題:如果我將標準替換爲對另一個單元格的引用,公式將停止工作。我對excel比較陌生,不熟悉其功能的限制/約束,我懷疑這是問題所在。

任何幫助非常感謝,讓我知道如果我需要提供更多的信息。

ANKIT

回答

2

創建一個名稱(如命名範圍,而是指一個值,而不是一個範圍。)

對於Excel 2007和2010年,公式選項卡上,定義名稱組,名稱管理器
對於Excel 2003插入,名稱,定義

創建一個新的名稱(允許使用的名稱「關鍵詞」),設置「指的是」價值

={"*costco*","*saputo*","*t & t*"} 

後的公式編輯作爲進入數組公式

=IF(SUM(COUNTIF($B10,KeyWords))>0,$C10," ") 

編輯列表然後編輯KeyWords的值就是指值。這可以通過名稱管理器來完成,或者如果你願意,通過VBA

編輯

示例VBA

Sub SetKeyWords() 
    Dim wb As Workbook 
    Dim nm As Name 

    Set wb = ActiveWorkbook 
    Set nm = wb.Names("KeyWords") 
    nm.RefersTo = "={""NewString""}" 

End Sub 
+0

Chris,你的解決方案對我來說是一個理想的設置,但是當公式中使用KeyWords時,excel只會識​​別引用值中的第一項(「* costco *」)。有任何想法嗎? – Ankit 2011-06-13 11:39:23

+0

作爲數組公式輸入公式(按ctrl-shift-進入,而不是隻輸入) – 2011-06-13 12:48:18

+0

偉大的解決它!最後一個問題,我將如何使用VBA編輯「引用值」的值? – Ankit 2011-06-13 13:46:32

1

負載你正在尋找到一個數組(經由轉換範圍到一個數組,或者具有用戶選擇從一個小的形式你設計串)

Sub MyLookup(arrCategories() As Variant) 
    Dim searchrange As Range 
    Dim xCell As Range 
    Dim count As Integer 
    'set searchrange to the proper column 
    For Each xCell In searchrange 
     For Each catg In arrCategories 
      If xCell = catg Then 
       'Do something here 
      End If 
     Next catg 
    Next xCell  
End Sub 

則可以在串需要根據案件是否重要來調整您的字符串數組。根據您的數據集的大小,將searchrange轉換爲數組可能會更好。

可能有更快的方法來查看是否在給定範圍內找到某些字符串,但這是一般想法。

+0

感謝您的快速反應!我在圍繞邏輯方面遇到了一些麻煩。是arrCategories還是catg包含要搜索的字符串的數組? – Ankit 2011-06-13 12:26:16

+0

@Ankit arrCategories是一個包含字符串「* costco *」,「* saputo *」,「* t&t *」'的數組。 'catg'代表循環過程中'arrCategories'中的當前項(在循環的第一次迭代期間等於「* costco *」)。 – jonsca 2011-06-13 12:33:21

+0

啊,現在我明白了邏輯,謝謝。但是,「If xcel = catg」行確實匹配,我需要一個近似匹配(描述列是一個句子)。我試圖使用Like運算符,但沒有取得任何成功。在這種情況下也許有一種方法可以使用通配符,我無法弄清楚如何? – Ankit 2011-06-13 21:16:31