指向Excel中的相对其他工作表

我试图find一种方法来从一个单元格中获取当前工作表中左侧(在托盘中)的工作表中的单元格中的数据。

我知道如何打电话给其他表通过

=Sheet1!A1 

但现在我需要最好的解释

 =Sheet[-1]!A1 

有任何想法吗?

使用Tab键顺序作为计算的基本部分是Excel计算的复杂和风险的方法。 Excel提供了许多select,你最好使用:

  1. belisariusbuild议的简化版本是: =INDIRECT(A1 & "!A2")其中单元格A1具有数据源表的名称,并且A2在数据源表中具有目标单元的名称。 如果您知道感兴趣的表单的名称(或者可以用某种方式查看),请使用此方法。

  2. 如果您需要经常这样做,您可能需要将数据导出到实际的数据库(即MS Access)。 然后,您可以进行标准的SQL查询并将结果导入到Excel文件中。

  3. 如果你绝对想要去VBA路线,那么你必须写一些代码:
    3A。 抓取活动工作簿的所有名称,并将它们存储在一个数组中。
    3B。 标识该数组中当前活动工作簿的索引号。 从该索引中减去1以获得工作表左侧。
    3C。 从该表中获取单元格值。

  4. 你也可以用命名范围来怪异。 在Excel 2003中,转到插入 – >名称 – >定义 ,添加一个新的命名范围,您可以在计算中使用该名称,而不是按行和列引用单元格。

编辑

整个想法与这一个,是你有安排表,并能够移动它们,这将改变计算。 – Gnutt 1小时前

请,请不要这样做。 对于初学者来说,这不是一个与电子表格交互的标准方法。 您的最终用户可能会感到困惑,甚至可能不会要求澄清。

你会想要探索数据validation的想法:

  1. 使用数据 – >validation ,做一个下拉菜单列出工作簿中的所有工作表(如果所有工作表的名称都是静态的,则可以对它们进行硬编码,否则,需要一些VBA来提取它们)。
  2. 然后用户只是select他们select的表格,间接()会自动更新一切。

或者,您也可以查看“ 工具” – >“scheme” 。 我不知道谁使用这个function,但你可能是一个很好的候选人。 基本上,它可以让你看到使用不同数据集(即“场景”)的计算结果,以便用户可以在它们之间来回切换。

使用上面两种方法中的任何一种,都可以完全避免使用VBA,从而在打开文件时为用户节省恼人的警告信息。

 =INDIRECT("Sheet"&TEXT(VALUE(MID(CELL("filename",A8),FIND("]",CELL("filename",A8))+1,256))-1,"#")&"!A1") 

注意事项:

  1. 您的工作簿必须先保存
  2. A8可以被对任何非错误单元格的引用所取代

我知道这里不是好习惯,但我想做类似的事情。 而且它的确在一定程度上复制了数据库的function,但是我没有时间和支持来从头开始构build一个,当时已经有一半了。

我希望能够做到这一点的原因是创build一个汇总表,链接到工作簿中的所有工作表,并自动扩展,如果你插入一个新的工作表。 这是pipe理一个大的销售/报告电子表格与许多不同的业务单位,都具有相同的结构(即使用相同的工作表格式报告不同的人相同的结果,有一个高周转率,我想有几个总结工作表报告源代码表的不同方面,如果每次重新创build所有的表,这将非常耗时。

应该能够使用row()作为索引标记来定义您想要的信息,如REPLACE,OFFSET或INDEX,但是您不能仅仅引用2D数组。

而Excel将三维引用视为统计函数的数组,对于引用函数来说,它看起来并不相同。 你可能有SUM(sheetX:sheetY!A1),并且能够在它们之间添加一个表单,但是没有(例如)一个INDEX(sheetX:sheetY!A1,n)函数。 我尝试过使用这些2D函数作为数组公式的一部分,并将3D引用定义为一个数组或一个命名的范围…以及它是值得去的:)。

所以我相信这是一个有效的行动。 我也相信一定有办法做到这一点,但是现在我又回到了一个由计算问题引起的错误风险的UDF,或者操作一个Workbook_SheetChange函数或类似的东西。 或者创build一个主表单来控制所有其他的使用基于所有工作簿数组的子例程来填充。