0

请原谅我的无知,但我需要以下代码的帮助

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 宏并在主宏中运行它们 - 我相信你会同意这不是很有效。

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

谢谢

4

2 回答 2

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
于 2013-04-24T19:06:07.117 回答
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

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

于 2013-04-25T00:50:18.917 回答