dynamic表索引号

我想写一个函数,返回该函数所在工作表的索引号。

我有这个:

Function Sheet() Sheet = ThisWorkbook.ActiveSheet.Index End Function 

我在工作簿中有多个工作表都使用该function,但都需要参考他们自己的特定工作表。 当我更新一个工作表时,使用“activesheet”,所有其他工作表将其结果更改为新的工作表,而不是保留在自己的工作表中。

有没有办法将函数限制在唯一的工作表上?

在Excel 2016,Excel 2013,Excel Online,Excel 2016 for Mac中,您可以使用内置的Excelfunction:

 =SHEET() 

否则,使用chris neilsen方法或类似的方法: 从单元格引用获取图表索引号(函数)

 Function SheetNum(Optional celRef As Range) As Long With Application.Caller.Parent If celRef Is Nothing Then SheetNum = .Index Else SheetNum = celRef.Parent.Index End If End With End Function 

build议 :将您的UDF的名称从Sheet更改为像MySheet任何MySheet

如果你想要一个公式来获得工作表的名字(而不是索引),你可以使用这个公式:

 =REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"") 

您可以使用Application.Caller来获取对UDF所在单元格的引用。从中可以轻松获取索引

 Function Sheet() Dim rng as Range Set rng = Application.Caller Sheet = rng.Worksheet.Index End Function 

有关呼叫者的详细信息,请参阅帮助,并添加适当的error handling

您也可以使用利用Excel的XLM语言的范围名称(范围公式)

  1. 定义范围名称ShtNames as =GET.WORKBOOK(1+0*RAND())
  2. 定义第二个范围名称, ShtName as =GET.CELL(32+0*NOW(),INDIRECT(SUBSTITUTE(REFTEXT(!$A$1),1,""),FALSE))

然后在你想要索引的表格中,
=MATCH(ShtName,ShtNAmes,0)

更新Fadi的问题

您可以使用下面的公式(来自任何工作表)来返回工作表名称以查找AllSheets ,而不是添加第二个名称。所以,在工作表1的A1

=MATCH(RIGHT(CELL("filename",Sheet2!A1),LEN(CELL("filename",Sheet2!A1))-FIND("[",CELL("filename",Sheet2!A1))+1),AllSheets,0)

将返回Sheet2的表单位置