为列中的每个单元格增加公式中的单元格参考

时间:2013-04-24 16:51:09

标签: 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
    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

由于我忘记了大部分编码,而且我认为这是一个简单的解决方案,我去google并获得了上面的代码。它在单个单元格上运行良好,但我希望能够在D3到D29的一系列单元格中更新公式,这就是我陷入困境的地方。

我试过

sTemp = Range("D3:D29").Formula

没有运气。

我目前唯一可以获得我想要的方法是创建120个宏并在Master Macro中运行它们 - 我相信你们会同意它并不是很有效。

我希望能够轻松地将解决方案应用到工​​作表中的其他列。

由于

2 个答案:

答案 0 :(得分:0)

忽略您要执行此操作的原因。我想你缺少的是你只需要循环你的代码。

我想你知道的范围是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

答案 1 :(得分:0)

如果我已正确理解您的意图,以下代码应该可以解决问题。它假设目标范围中的公式是单个单元格引用(例如,“= 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

*当使用更复杂的公式时,公式将实际运行,只要它以单个单元格引用结束即可。但是,我认为结果是不可取的。