Excel 如何更改工作表上所有公式中的单元格引用

Excel 如何更改工作表上所有公式中的单元格引用,excel,reference,offset,vba,Excel,Reference,Offset,Vba,我是VBA的初学者,所以我希望这不是一个愚蠢的问题。我四处寻找,找不到一个简单的方法来做我需要的事情。因此,我有一个数据表,它提供了12个其他工作表(每个月1个),我需要偏移表13行中所有公式中的单元格引用。例如: 我需要将公式从“=Data!C18”更改为“=Data!C31” 感谢您的帮助第一次误解了您的问题。以下是您可以做的: 如果您的公式是您上面给出的简单参考,那么这种通用方法应该有效: Sub shift_reference(rgRange As Excel.Range, iRowOf

我是VBA的初学者,所以我希望这不是一个愚蠢的问题。我四处寻找,找不到一个简单的方法来做我需要的事情。因此,我有一个数据表,它提供了12个其他工作表(每个月1个),我需要偏移表13行中所有公式中的单元格引用。例如:

我需要将公式从“=Data!C18”更改为“=Data!C31”


感谢您的帮助

第一次误解了您的问题。以下是您可以做的:

如果您的公式是您上面给出的简单参考,那么这种通用方法应该有效:

Sub shift_reference(rgRange As Excel.Range, iRowOffset As Integer)

  Dim rgCell As Excel.Range
  Dim sFormula$, iRow%

  For Each rgCell In rgRange.Cells

    ' read formula from cell
    sFormula = rgCell.FormulaR1C1

    ' cut off = sign from equation
    sFormula = Right$( sFormula, Len( sFormula ) - 1 )

    ' insert offset command and reassemble
    sFormula = "= offset( " + sFormula + ", " + CStr( iRowOffset ) + ", 0 )"

    ' set new formula for this cell
    rgCell.FormulaR1C1 = sFormula  

  Next rgCell
End Sub
当然,最困难的部分是注释的部分-如果您的所有公式都是上面给出的引用,那么这应该不难,只是有点乏味(您需要通过字符串操作从公式中提取行和列编号)。你需要帮忙吗

更新: 好的,您也可以简单地插入Excel中可用的
offset
命令。这为您提供了更多的选项:现在,我使用了一个“硬编码”行偏移量,即作为参数传递的行偏移量。或者,也可以使用单元格引用,在其中输入ror偏移量-如果它发生变化,只需更新一个参数即可。比方说,包含偏移量的单元格是A1,那么代码中的插入行就变成了A1

sFormula = "= offset( " + sFormula + ", A1, 0 )"
最后,但并非最不重要的一点是,没有什么可以阻止您也插入列偏移量,在这种情况下,您需要将偏移量公式的第三个参数(当前包含
0
)替换为您想要的任何参数


在这一点上,我要指出,我现在并没有坐在任何Windows机器上,所以我是干编码,但这应该是相当好的

谢谢你的帮助,罗布!问题是所有公式都引用不同的单元格。我必须在所有12张纸上更新50个不同的单元格引用,每一张纸都需要将所有引用向下移动13行,比以前多。太棒了!是的,我需要一些帮助。举一个例子,剩下的我自己就能得到。再次感谢。嗨@tedi,我已经更新了示例。希望它能工作-我现在不能测试它。