【问题标题】:Excel VBA recommendationExcel VBA 推荐
【发布时间】:2014-12-04 14:42:24
【问题描述】:

我正在使用一个公式,该公式将使用索引和匹配来计算一个值,并且输出是从另一个单元格 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 不变

下面是创建的 VBA 宏:

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)。但是我在 100 个单元格中使用这个公式,并且手动编辑所有内容实际上是不可能的。无论如何我可以更改 VBA 以使 B2 在整个单元格范围内保持不变以运行此公式?

【问题讨论】:

  • 你为什么不用=IFERROR($B$2-...

标签: vba excel excel-formula


【解决方案1】:

我认为您正在寻找 Excel 公式功能中的锚单元格。这可以通过在公式中添加“$”美元符号来完成。因此,将“B2”更改为“$B$2”,当您复制公式时,这应该使 B2 保持锚定。

我不确定如何或是否能很好地转换为 VBA,但我认为这可能会为您指明正确的方向。

【讨论】:

    【解决方案2】:

    我认为您的问题已经得到解答,但我有一些东西要补充您的理解......

    如果您想在使用 R1C1 引用样式输入公式时复制半静态 $B2 引用,则应更改

    =IFERROR(RC[-1]...
    

    =IFERROR(RC2...
    

    第一个示例中的 RC[-1] 将动态引用放置在同一行和左侧 1 列,而 RC2 将半静态引用放置到同一行且始终位于第 2 列。

    让我感到困惑的是,这整行代码混合了 R1C1 参考和标准参考:

    "=IFERROR(RC[-1]-(INDEX(raw!C1:C4,MATCH(1,(raw!C1=data!RC1)*(raw!C3=data!R1C),0),4)),"""")"
    

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      相关资源
      最近更新 更多