2016-08-16 70 views
0

我需要減少正在開發的文件,並且我知道使用VBA的一個好方法。不幸的是,我在VBA中並不先進,而且我正在努力設計這個。 我有三個不同的流主辦的標價,我想結合在一個象下面這樣:將一個巨大的公式編碼到結合IF和Vlookup的VBA中

Stream  Site   Brand Code Price 
Mainstream Boston  Brand 01  Formula 
Midstream New York  Brand 02 
Midstream Los Angeles Brand 02 

目前我使用一個公式,基本上執行以下操作:

=IF(AND(stream="mainstream",Site = "Boston"),vlookup(Brandcode,list 1, 2,0),IF(ANd(stream="midstream", Site = "Boston", vlookup(Brandcode,list 2, 2,0),...)) 

公式實際上工作得很好,問題是我正在測試許多其他條件,而不僅僅是這個,因此文件變得非常沉重,所以我想創建一個VBA代碼來創建一個函數或子例程,但我正在努力理解怎麼做。

感謝

回答

1

這其實可以不使用VBA通過使用指定範圍,而不是實現。看看公式,很明顯,您的查找範圍取決於streamsite的組合。

您可以爲每個查找範圍創建一個Named Range。爲此,請突出顯示包含第一個查找組的單元格範圍(比如紐約中游)。接下來,按CTRL + F3打開Name Manager。最後,給這個組名稱MidstreamNewYork。 (注意:您不能在名稱中包含空格)。

接下來,您可以更新您的Vlookup函數。您不再需要包含IF(AND...組件,因爲您的查詢是動態的。假設您在第2行輸入公式,公式將爲:

=VLOOKUP(C2,INDIRECT(SUBSTITUTE(A2&B2, " ", "")),2,FALSE) 

讓我們來分解公式。 ?(1)C2只是brandcode(I假定它是在列C (2) The INDIRECT function treats a字符串as a範圍. We are passing in Cells A2 and B2 , which are "Midstream" and "New York", respectively. We use the替代function to remove the spaces since they aren't allowed. So now, we are looking up a named range called MidstreamNewYork`(聽起來很熟悉)(3)的VLOOKUP的其餘部分是標準:查找第二列,只匹配要求

試試看,讓我知道它是否符合您的要求