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

时间:2015-02-19 15:42:02

标签: excel-vba reference offset vba excel

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

我需要我的公式来改变" =数据!C18" to" = Data!C31"

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

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

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,然后代码中的插入行变为

sFormula = "= offset( " + sFormula + ", A1, 0 )"

最后,但并非最不重要的是,没有什么可以防止你也插入偏移量,在这种情况下你需要替换偏移公式的第三个参数(当前包含0无论你的心愿如何。

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