VBA遍历具有多个范围和条件的行

时间:2018-07-28 10:16:01

标签: excel vba loops range conditional

免责声明:VBA的新功能

我有一张Excel工作表,我想在其中构建一个可以执行以下操作的VBA。

  1. 我的要求是根据由equals行中的文本确定的公式来填充Z行中的值。
  2. 该公式以不同组合(由行M中的文本确定)处理行ABC中的值。
  3. 为从第M行到第5行的每一行都进行循环。

例如:
如果单元格为10000,则为M5 = Apple;
如果单元格为Z5 = A5+B5,则为M9 = Samsung

我知道嵌套的Z9 = C9+A9公式很容易做到,但条件太多,我正在寻找一条自动且更清洁的路线。

谢谢!

1 个答案:

答案 0 :(得分:0)

不是VBA,但我认为这可以解决问题:

该解决方案需要两个部分:
a)一个表(或命名范围),用于保存要匹配的字符串值,并添加两列。该表(BrandEq-我的示例)实质上是一个映射,用于指示要对哪些单元格求和。

在第(A,B,C,...)列后跟一个“#”,表示以后要添加的行。

b)每个单元格(在您的情况下为z)中都有一个自定义公式(详细信息如下),以返回相应列的总和。

[Please see the attached image]

我个人比较喜欢表格,但是建议使用表格或命名范围,因为可以轻松添加其他“品牌”和组合(Cell1,Cell2)(我的示例),并且公式会自动更新,因此无需返回到基本公式。

“ z单元”的公式为:     =INDIRECT(SUBSTITUTE(VLOOKUP(Sheet1!$D15,BrandEq,2,FALSE),"#",TEXT(ROW(),"#####"))) +INDIRECT(SUBSTITUTE(VLOOKUP(Sheet1!$D15,BrandEq,3,FALSE),"#",TEXT(ROW(),"#####")))

从“由内而外”的操作可能更容易理解:
    VLOOKUP(从“数据”表/范围-当前行的品牌列,进入“ BRANDEQ”表/范围,返回相应列的内容-第一行中的注释2和第二行中的3,FALSE =完全匹配在查找值上)
这个值(例如a#)->
    SUBSTITUTE(井号标签“#”占位符,当前row()作为text()值)
    Indirect(返回该单元格的对应值-从数据表中,该公式输入到“ zval”第14行(我的示例)中(例如,“ a#”-> a11 = 100)

第二次调用此公式,但是这次返回'Cell2值,其他所有都是相同的函数。 (例如'b#'-> b11 = 15)

结果加在一起。

第11行的解析如下:     INDIRECT(SUBSTITUTE(VLOOKUP(Sheet1!$ D11,BrandEq,2,FALSE),“#”,TEXT(ROW(),“ #####”))))     +
    INDIRECT(SUBSTITUTE(VLOOKUP(Sheet1!$ D11,BrandEq,3,FALSE),“#”,TEXT(ROW(),“ #####”)))

INDIRECT(SUBSTITUTE(VLOOKUP('Apple',BrandEq,2,FALSE),"#",TEXT(14,"#####")))  
+      
INDIRECT(SUBSTITUTE(VLOOKUP('Apple',BrandEq,3,FALSE),"#",TEXT(14,"#####")))

INDIRECT(SUBSTITUTE("a#","#","11")) + INDIRECT(SUBSTITUTE("b#","#","11"))

INDIRECT("a11") + INDIRECT("b11")

 100 + 15

 115

如果需要引用其他/不同的单元格,则只需将其包含在“ BrandEQ”表中。注意:被引用的单元格不必是连续的-它们可以分布在整个行中。