首页 > 解决方案 > VBA循环遍历具有多个范围和条件的行

问题描述

免责声明:VBA 新手

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

  1. 我的要求是Z根据 row 中的文本确定的公式在 row 中填充一个值M
  2. 该公式以不同组合(由 row 中的文本确定AB处理来自 row 的求和值。CM
  3. 从 row5到 row为每一行循环10000

例如:
如果单元格M5 = Apple,则Z5 = A5+B5
如果单元格M9 = Samsung,那么Z9 = C9+A9

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

谢谢!

标签: excelvbaloopsrangeconditional

解决方案


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

该解决方案需要两个部分:
a)一个表(或命名范围)来保存要匹配的字符串值,以及要添加的两列。该表(BrandEq - 我的示例)本质上是一张地图,用于指示要对哪些单元格求和。其中列 (A,B,C,...) 后跟一个“#”,表示稍后要添加的行。

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

[请看附图]

就个人而言,我更喜欢表格,但建议使用表格或命名范围,因为可以轻松添加其他“品牌”和组合(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(井号标签“#”占位符,当前行()作为文本( ) value)
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”表中。注意:被引用的单元格不需要是连续的 - 它们可以分布在整个行中。


推荐阅读