Excel VBA-运行宏时向每个引用的单元格添加一个

时间:2018-07-04 15:11:05

标签: excel excel-vba excel-formula vba

过去两个小时,我一直在尝试寻找答案,但似乎找不到我想要的东西-请注意,我真的是VBA和宏的新手。

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

当前公式为git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"

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

我必须对多个公式执行此操作。有没有一种简单的方法可以通过宏执行此操作?

非常感谢您

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

如果希望它在关闭工作簿时仍然存在,则需要将数字存储在工作表中的某个位置。假设它位于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)"

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

答案 2 :(得分:0)

另一种方法是在公式中使用>>> template = "first {0} second {1} first again {0}" >>> template.format("foo", "bar") 'first foo second bar first again foo'

假设公式在OFFSET

然后:

Q185

成为:

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

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