【问题标题】:Excel VBA - Add one to each referenced cell when running macroExcel VBA - 运行宏时向每个引用的单元格添加一个
【发布时间】:2018-07-04 15:11:04
【问题描述】:

过去几个小时我一直在寻找答案,但似乎找不到我要找的东西 - 请注意,我对 VBA 和宏真的很陌生。

我要做的是在每次运行宏时向我的公式所引用的内容添加一个。例如:

目前公式为=100*((Q$179/Q$167)-1)

运行时,我希望它是=100*((Q$180/Q$168)-1)

我必须为多个公式执行此操作。有没有一种简单的方法可以用宏来做到这一点?

非常感谢您

【问题讨论】:

  • 您的公式是在工作表中使用还是在您的代码中使用?
  • 在工作表中使用
  • 为什么你需要一个宏呢?您只需将该公式复制下来,Excel 就会自动调整该公式。请提供更多背景资料。你到底想做什么?您的问题背后的目标是什么?
  • 简单的解决方案是修改公式以使用辅助单元格来确定范围,=100*((Q$180/INDIRECT("Q$"&A1,TRUE))-1)
  • 因此公式将保留在相同的单元格中。基本上我正在做的是我有一个工作表,我需要在每个月底更新。我每个月在上面插入一个新行,然后这些公式需要更新一个以链接到我制作的新数据行。

标签: excel excel-formula vba


【解决方案1】:

我个人会使用 RegEx 来实现这一点。以下将在您的公式中将每个单元格行增加 1。这也应该适用于Q 以外的列

Option Explicit
Sub IncrementFormula()
    Dim tmpFormula As String
    Dim RegEx As Object
    Dim Match, SubMatch

    tmpFormula = "=100*((Q$179/Q$167)-1)"

    Set RegEx = CreateObject("vbscript.regexp")
    With RegEx
        .Global = True
        .Pattern = "(?:[A-Z]{1,})(?:\$|)([0-9]{1,})"

        If .test(tmpFormula) Then
            For Each Match In .Execute(tmpFormula)
                For Each SubMatch In Match.submatches
                    tmpFormula = Replace(tmpFormula, Match, Replace(Match, SubMatch, vbNullString) & CLng(SubMatch) + 1)
                Next SubMatch
            Next Match
        End If
    End With
    MsgBox tmpFormula
End Sub

使用上面的公式将输出=100*((Q$180/Q$168)-1)

【讨论】:

    【解决方案2】:

    如果您希望它在工作簿关闭时仍然存在,您需要将您的号码存储在工作表中的某个位置。假设它在 Sheets(2) 的 Cell(1,1) 中,您可以使用

        dim incVal as integer
        incVal = cint(Sheets(2).Cells(1,1))+1
        Sheets(2).Cells(1,1) = incVal
        dim formula as string
        formula = "=100*((Q$" & incVal & "/Q$" & (incVal-12) & ")-1)"
    

    然后只需将所需单元格的公式设置为该公式即可。希望这可以帮助。

    【讨论】:

      【解决方案3】:

      另一种方法是在公式中使用OFFSET

      假设公式在Q185

      然后:

      =100*((Q$180/Q$168)-1)
      

      变成:

       =100*((OFFSET(Q185,-5,0)/OFFSET(Q185,-17,0)-1))
      

      当您在表格底部(以及公式上方)插入行时,公式及其引用的单元格也会向下移动

      【讨论】:

      • 非常感谢,这解决了我的问题——甚至不需要使用 VBA。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2019-03-01
      • 2013-02-26
      • 2014-08-23
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多