过去两个小时,我一直在尝试寻找答案,但似乎找不到我想要的东西-请注意,我真的是VBA和宏的新手。
我要执行的操作是在每次运行宏时向公式引用的内容添加一个。例如:
当前公式为git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"
运行时,我希望它是=100*((Q$179/Q$167)-1)
我必须对多个公式执行此操作。有没有一种简单的方法可以通过宏执行此操作?
非常感谢您
答案 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)
在表格底部(在公式上方)插入行时,公式及其所引用的单元格也将向下移动