【问题标题】:How to change cell reference in all formulas on a work sheet如何更改工作表上所有公式中的单元格引用
【发布时间】:2015-02-19 15:42:02
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

    标签: excel reference offset vba


    【解决方案1】:

    第一次误解了你的问题。您可以执行以下操作:

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

    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,那么代码中的insert-line就变成了

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

    最后但同样重要的是,没有什么能阻止您也插入 偏移量,在这种情况下,您需要将偏移量公式的第三个参数(当前包含 0)替换为随心所欲。

    现在让我指出,我现在没有坐在任何 Windows 机器上,所以我正在干编码,但这应该还可以。

    【讨论】:

    • 感谢罗伯的帮助!问题是所有公式都引用了不同的单元格。我必须更新所有 12 张工作表上的 50 个不同的单元格引用,每张工作表都需要将所有引用向下移动 13 行,比之前的工作表多。
    • 太棒了!是的,我需要一点帮助。一个例子,我应该能够自己得到其余的。再次感谢。
    • 嗨@tedi,我已经更新了示例。希望它有效 - 我现在无法测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2018-11-06
    相关资源
    最近更新 更多