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)),"""")"