Excel VBAbuild议
我正在使用一个公式,它将使用索引和匹配来计算一个值,并且输出是从另一个单元格B2值中减去的。我需要将B2
保存为所有单元格的公共减法分量
在单元格C2
使用下面的公式
=IFERROR(B2-(INDEX(raw!$A:$D,MATCH(1,(raw!$A:$A=data!$A2)*(raw!$C:$C=data!C$1),0),4)),"")
但是如果我把这个公式拖到下一个单元格, D2
公式正在变化
=IFERROR(C2-(INDEX(raw!$A:$D,MATCH(1,(raw!$A:$A=data!$A2)*(raw!$C:$C=data!D$1),0),4)),"")
C2
正在取代B2
我想保持B2
不变
下面是创build的VBAmacros:
Sub Macro7() ' ' Macro7 Macro ' Selection.FormulaArray = _ "=IFERROR(RC[-1]-(INDEX(raw!C1:C4,MATCH(1,(raw!C1=data!RC1)*(raw!C3=data!R1C),0),4)),"""")" Selection.AutoFill Destination:=ActiveCell.Range("A1:D1"), Type:= _ xlFillDefault ActiveCell.Range("A1:D1").Select End Sub
如果我手动编辑每个单元格中的公式,它工作正常(将C2,D2,E3,F2
等更改为B2
)。 但是我在100s的单元格中使用这个公式,手动编辑都是不现实的。 无论如何,我可以改变VBA,以保持B2在细胞范围内不变,以运行此公式?
我认为你正在寻找在Excel公式function的锚单元格。 这可以通过在公式中添加“$”美元符号来完成。 所以把“B2”改成“$ B $ 2”,当你复制你的公式时,应该保持B2的锚定。
我不知道如何或如果这将转换为VBA,但我想这可能指向你在正确的方向。
我想你的问题已经被回答了,但是我有一些东西可以增加你的理解。
如果要在使用R1C1参考样式input公式时复制半静态的$ B2参考,则应该更改
=IFERROR(RC[-1]...
至
=IFERROR(RC2...
第一个示例中的RC [-1]将dynamic引用放置在同一行,左侧是1列,而RC2将半静态引用放置在同一行,并始终放置第二列。
令我困惑的是,这整个系列有一个R1C1引用和标准引用的混合:
"=IFERROR(RC[-1]-(INDEX(raw!C1:C4,MATCH(1,(raw!C1=data!RC1)*(raw!C3=data!R1C),0),4)),"""")"