Excel 为列中的每个单元格增加公式中的单元格引用
请原谅我的无知,但我需要以下代码的帮助Excel 为列中的每个单元格增加公式中的单元格引用,excel,reference,range,increment,cells,Excel,Reference,Range,Increment,Cells,请原谅我的无知,但我需要以下代码的帮助 Sub D3() Dim currentRow As String Dim sTemp As String sTemp = Range("D3").Formula 'cell in sheet that needs reference to be increased Do While (IsNumeric(Right(sTemp, 1))) currentRow = Right(sTemp, 1) & currentRow s
Sub D3()
Dim currentRow As String
Dim sTemp As String
sTemp = Range("D3").Formula 'cell in sheet that needs reference to be increased
Do While (IsNumeric(Right(sTemp, 1)))
currentRow = Right(sTemp, 1) & currentRow
sTemp = Mid(sTemp, 1, Len(sTemp) - 1)
Loop
currentRow = CLng(currentRow) + 1 'Number to increment cell reference by
Range("D3").Formula = sTemp & currentRow
End Sub
由于我已经忘记了我的大部分编码,而且我认为这是一个简单的解决方案,所以我去了谷歌,得到了上面的代码。它在单个单元格上运行得非常好,但我希望能够在从D3到D29的单元格范围内更新公式,这就是我陷入困境的地方
我试过了
sTemp = Range("D3:D29").Formula
没有运气
目前我唯一能得到我想要的东西的方法是创建120ish宏并在主宏中运行它们——我相信你会同意这不是很有效
我希望能够轻松地将解决方案应用于工作表中的其他列
感谢您忽略您要执行此操作的原因。我想你缺少的是你只需要循环你的代码 我想你知道D3:D29的范围。修改您的代码如下
Sub D3()
Dim currentRow As String
Dim sTemp As String
Dim i as Integer
For i = 3 to 29
currentRow = ""
sTemp = Range("D" & i).Formula 'cell in sheet that needs reference to be increased
Do While (IsNumeric(Right(sTemp, 1)))
currentRow = Right(sTemp, 1) & currentRow
sTemp = Mid(sTemp, 1, Len(sTemp) - 1)
Loop
currentRow = CLng(currentRow) + 1 'Number to increment cell reference by
Range("D" & i).Formula = sTemp & currentRow
Next i
End Sub
如果我正确理解了您的意图,下面的代码应该可以实现这个目的。它假定目标范围内的公式是单单元格引用(例如“=CC95”)* 我已经消除了阻止代码编译的类型转换错误。此外,我还重写了有点混乱的代码,以增加行号 要在其他列上运行该过程,只需更改targetColumn、firstTargetRow和lastTargetRow变量的值
Sub IncrementFormulaRows()
Dim formulaString As String
Dim targetColumn As String
Dim firstTargetRow As Long
Dim lastTargetRow As Long
Dim i As Long
Dim j As Long
targetColumn = "D"
firstTargetRow = 3
lastTargetRow = 29
For i = firstTargetRow To lastTargetRow
If Range(targetColumn & i).HasFormula Then '// Skip cell if it does not
formulaString = Range(targetColumn & i).Formula '// contain a formula
j = Len(formulaString)
While (j > 0) And IsNumeric(Mid(formulaString, j, 1)) '// Walk formula backwards
j = j - 1 '// to find last char of
Wend '// column reference
Range(targetColumn & i).Formula = Left(formulaString, j) _
& (Val(Mid(formulaString, j + 1, Len(formulaString) - j)) + 1)
End If
Next i
End Sub
*当使用更复杂的公式时,只要该公式以单个单元格引用结尾,该公式实际上将运行。但是,我认为结果是不理想的。欢迎堆栈溢出!我不太明白您试图做什么,但请注意,您正在While循环中测试一个数值,但是
currentrow
是一个字符串变量。然后,在循环结束后,您将尝试为当前行
分配一个Long。如果你展示了你开始使用的公式和你想要结束的公式,这可能会有所帮助。你熟悉Autofill吗?Stepan,如果目标是,例如,将单元格公式=C15
更改为=C16
(虽然我不清楚为什么要这样做。Rohit,这段代码没有编译,因为CLng上存在类型转换问题,需要一个数字参数(可以使用Val)。我还得到了一个“1004”For循环底部的公式赋值出错。这是因为每个循环都连接了curretRow变量。更正了代码。