excel - VBA循环遍历具有多个范围和条件的行
问题描述
免责声明:VBA 新手
我有一个 Excel 表,我想在其中构建一个执行以下操作的 VBA。
- 我的要求是
Z
根据 row 中的文本确定的公式在 row 中填充一个值M
。 - 该公式以不同组合(由 row 中的文本确定
A
)B
处理来自 row 的求和值。C
M
- 从 row
5
到 row为每一行循环10000
。
例如:
如果单元格M5 = Apple
,则Z5 = A5+B5
;
如果单元格M9 = Samsung
,那么Z9 = C9+A9
我知道嵌套IF
公式很容易做到,但是条件太多了,我正在寻找一条自动且更清洁的路线。
谢谢!
解决方案
不是 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”表中。注意:被引用的单元格不需要是连续的 - 它们可以分布在整个行中。
推荐阅读
- neural-network - ValueError: 目标尺寸 (torch.Size([128])) 必须与输入尺寸 (torch.Size([112])) 相同
- clion - 如何从 CLion 执行单个类或文件?
- pandas - 如何创建基于简单 Datafrme 的网络图
- typescript - 在 TypeScript 中导入外部 JavaScript 代码 - 找不到模块或其对应的类型声明
- shell - 如何使用 / 在 sed
- python - 查找图像中一条线上的像素坐标
- security - ImagickException:零大小的图像字符串传递
- c# - URL 忽略 GET 请求中的参数 (ASP.NET)
- vba - 如何使用“动态”文本框触发事件?
- javascript - Linking.addEventListener 不工作(使用博览会)