我是VBA的初学者,所以我希望这不是一个愚蠢的问题。我四处搜寻,找不到一个简单的方法来做我需要的事情。所以我有一个数据表,可以提供12个其他工作表(每月1个),我需要将工作表中所有公式中的单元格引用偏移13行。例如:
我需要我的公式来改变" =数据!C18" to" = Data!C31"
感谢您的帮助
答案 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机器上,所以我是干编码,但这应该是相当不错的。