免责声明:VBA的新功能
我有一张Excel工作表,我想在其中构建一个可以执行以下操作的VBA。
equals
行中的文本确定的公式来填充Z
行中的值。M
中的文本确定)处理行A
,B
,C
中的值。 M
行到第5
行的每一行都进行循环。例如:
如果单元格为10000
,则为M5 = Apple
;
如果单元格为Z5 = A5+B5
,则为M9 = Samsung
我知道嵌套的Z9 = C9+A9
公式很容易做到,但条件太多,我正在寻找一条自动且更清洁的路线。
谢谢!
答案 0 :(得分:0)
不是VBA,但我认为这可以解决问题:
该解决方案需要两个部分:
a)一个表(或命名范围),用于保存要匹配的字符串值,并添加两列。该表(BrandEq-我的示例)实质上是一个映射,用于指示要对哪些单元格求和。
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”表中。注意:被引用的单元格不必是连续的-它们可以分布在整个行中。