2016-08-16 69 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的其余部分是标准:查找第二列,只匹配要求

试试看,让我知道它是否符合您的要求