【问题标题】:Code a huge formula into VBA combining IF and Vlookup结合IF和Vlookup将一个巨大的公式编码到VBA中
【发布时间】:2016-08-16 13:28:01
【问题描述】:

我需要减少我正在开发的文件,我知道使用 VBA 是一种好方法。不幸的是,我还没有在 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 代码来创建一个函数或一个子例程,但是我正在努力理解如何做到这一点。

谢谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这实际上可以在不使用 VBA 的情况下通过使用命名范围来实现。查看公式,很明显您的查找范围因streamsite 的组合而异。

    您可以为每个查找范围创建一个Named Range。为此,请突出显示包含第一个查找组的单元格范围(假设是 Midstream New York)。接下来,按 CTRL + F3 打开Name Manager。最后,将此组命名为MidstreamNewYork。 (注意:名称中不能包含空格)。

    接下来,您可以更新您的 Vlookup 函数。您不再需要包含 IF(AND... 组件,因为您的查找将是动态的。假设您在第 2 行输入一个公式,该公式将是:

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

    让我们分解公式。 (1) C2 只是品牌代码(我假设它在列 C.(2) TheINDIRECTfunction treats aStringas aRange. We are passing in CellsA2andB2, which are "Midstream" and "New York", respectively. We use theSUBSTITUTEfunction to remove the spaces since they aren't allowed. So now, we are looking up a named range calledMidstreamNewYork` (听起来很熟悉? ). (3) VLOOKUP 的其余部分是标准的:查找第二列,并且只匹配精确。

    试一试,如果它符合您的要求,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多