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变量。更正了代码。