如何在 Excel 中引用前一张表中的相同单元格?

如何在 Excel 中引用前一张表中的相同单元格?

我知道如何在 Excel 中引用另一张工作表中的单元格,但我想知道是否有某种方法可以自动执行此过程,这样如果我复制一张工作表,它将按顺序更新对上一张工作表的引用。

例如,假设 Sheet 中n有一个单元格引用 Sheet 中的单元格n-1。如果我有 Sheet 1、2 和 3,我希望 Sheet 3 中的单元格引用 Sheet 2 中的单元格。然后,如果我复制 Sheet 3(制作 Sheet4),我希望 Sheet 4 中的相同单元格引用 Sheet 3 中的单元格。

通常,我会将 Sheet3 中的单元格设置为'Sheet2'!A1。然后,如果我复制 Sheet3 以制作 Sheet4,我必须进入 Sheet4 上的同一单元格并将其从 更改为'Sheet2'!A1'Sheet3'!A1我更希望在复制工作表时自动完成此更改。

有没有办法自动执行此过程,而不必手动执行?我目前正在使用 Excel 2013 预览版,但我也有 Excel 2012。

答案1

我在这里找到了解决方案:j-walk.com/ss/excel/tips/tip63.htm。事实证明宏非常强大!:)

您可以在 VBA 中创建一个名为 sheetoffset 的函数来执行此操作

Function SHEETOFFSET(offset, Ref)
'   Returns cell contents at Ref, in sheet offset
    Application.Volatile
    With Application.Caller.Parent
        SHEETOFFSET = .Parent.Sheets(.Index + offset) _
         .Range(Ref.Address).Value
    End With
End Function

答案2

我没有仔细阅读您发布的整个 J-walk 文档,但这是一种相当简单的硬编码方法。它使用工作表的索引来引用其他工作表中的单元格,而不是工作表的名称,因此即使工作表被重命名或者您不知道下一个工作表的名称是什么,这也没关系。

Function prevSheet()
  Dim i As Integer
  Dim j As Integer

  i = ActiveSheet.Index             ' Obtain current sheet index
  j = i - 1                         ' Determine the previous sheet's index
  oldValue = Sheets(j).Range("A1")  ' Obtain value from prev sheet's A1 cell 
  
  newValue =  oldValue + 1          ' Random operation to alter prev sheet's value
  Range("A1") = newValue            ' Display the new value on current sheet's A1 cell

End Function

答案3

右键单击任意工作表选项卡,然后单击“查看代码”

将以下代码放入模块 1。(如果不在那里,请单击插入和模块)

代码

Function oldsheet(rng As Variant)
    Prevsn = "Sheet" & Val(Mid(ActiveSheet.CodeName, 6, (Len(ActiveSheet.CodeName) - 5))) - 1
    With Sheets(Prevsn)
        oldsheet = .Range(rng)
    End With
End Function

新的工作表如下公式

=oldsheet("J30")

按原样通过链接发布,以防被删除。

参考资料来自http://www.mrexcel.com/forum/excel-questions/399317-formula-referencing-previous-sheet.html

答案4

您可以使用定义的名称和公式来执行此操作。虽然您没有添加任何 VBA 代码,但它需要使用宏兼容文件类型(例如 .xlsm)保存文件。

创建定义的名称。命名wsNamesArray并在“引用”框中输入以下内容:

首先,创建两个定义的名称

这个答案显示在 Excel 中哪里可以访问定义的名称/命名范围。

名字: wsNamesArray

=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1))) & T(NOW())

第二个名字: wsName

=MID(CELL("filename", INDIRECT("A1")),FIND("]",CELL("filename",INDIRECT("A1")))+1,255) & T(NOW())

(公式的一部分&T(NOW()不会改变结果,但它会使公式“不稳定”,从而导致 Excel 在任何更改后重新计算它。这会使公式在重命名工作表后立即更新。)

公式

现在您已经创建了定义的名称,您可以在任何单元格中使用以下公式:

上一页

=IF(  MATCH(wsName,wsNamesArray,0)-1 =0, ERROR.TYPE(7), INDEX(wsNamesArray,MATCH(wsName,wsNamesArray,0)-1))

下一张

=IF(  MATCH(wsName,wsNamesArray,0)=wsCount, ERROR.TYPE(7), INDEX(wsNamesArray,MATCH(wsName,wsNamesArray,0)+1))

第一张表

=INDEX(wsNamesArray,1) & T(NOW())

最后一张

=INDEX(wsNamesArray,COUNTA(wsNamesArray)) & T(NOW())

本表

=wsName

第二页(注意公式中的 2)

=INDEX(wsNamesArray,2) & T(NOW())

第三页(注意公式中的 3)

=INDEX(wsNamesArray,3) & T(NOW())

相关内容