Excel 在单元格中按编号而不是名称引用图纸
比方说Excel 在单元格中按编号而不是名称引用图纸,excel,vba,excel-formula,Excel,Vba,Excel Formula,比方说 sheet3.name=“d” 有没有一种方法可以将公式=sum(sheet3!b:b)放在sheet3的单元格中,其中sheet3被实际的sheet3名称替换 到目前为止,我只能得到=sum('d'!b:b) 我可能可以使用VBA实现这一点,但我很好奇如何在单元格中实现这一点,这样我就不必每次都运行宏。我不确定这是否是个好主意,但这是我能想到的第一个 我将向VBA项目添加附加功能,该功能将返回图纸的实际名称3: Function Sheet3Name() Sheet3Name
sheet3.name=“d”
有没有一种方法可以将公式=sum(sheet3!b:b)
放在sheet3
的单元格中,其中sheet3
被实际的sheet3名称替换
到目前为止,我只能得到=sum('d'!b:b)
我可能可以使用VBA实现这一点,但我很好奇如何在单元格中实现这一点,这样我就不必每次都运行宏。我不确定这是否是个好主意,但这是我能想到的第一个 我将向VBA项目添加附加功能,该功能将返回图纸的实际名称3:
Function Sheet3Name()
Sheet3Name = Sheet3.Name
End Function
接下来,当您在Excel单元格中创建B:B列的求和公式时,您需要这样做:
=SUM(INDIRECT(Sheet3Name()&"!A:A"))
在工作表中的任意位置使用以下公式获取工作表名称-工作表必须有一个文件名才能工作:
=REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")
您可以使用以下方法引用该单元格:
=SUM(Indirect("'"&A1&"'!B:B"))
或者,如果不需要第二个单元格,可以将两个公式合并为一个:
=SUM(INDIRECT("'"&REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")&"'!B:B"))
如果可以使用将返回图纸名称的自定义项用户定义函数
Function SHEETNAME(number As Long) As String
SHEETNAME = Sheets(number).Name
End Function
然后一个公式
=SUM(INDIRECT(SHEETNAME(3) &"!B:B"))
将返回第3页B列的总和
SHEETNAME(number)
返回索引编号的图纸名称
因此,
Sheet(1)
返回Sheet1等对于任何不关心工作表顺序的人,Biff在mrexcel.com上的帖子效果良好
在Excel 2013中,转到功能区中的“公式”选项卡,并创建定义的名称:
Name: SheetNames
Refers to: =GET.WORKBOOK(1)&T(NOW())
然后使用如下示例中的公式:
=INDIRECT("'"&INDEX(MID(SheetNames,FIND("]",SheetNames)+1,255),A3)&"'!A1")
其中A3表示当前工作表中单元格中的索引号,A1表示要从其他工作表中检索的值的位置。即,在当前工作表中,如果A3=2,则公式将指向工作簿第二张工作表中的单元格A1。我只需在当前工作表中使用一列索引号,然后向下拖动此公式,它将填充所有其他工作表中的值
您需要另存为启用宏的文件(.xlsm)。@user2872180,请记住,如果您通过将工作表(3)移动到新位置或在工作表(3)之前添加新工作表来更改工作表顺序,则此操作将不起作用。在这种情况下,唯一的解决方案是我提出的。图纸(编号)不会返回所提供编号的图纸名称@martinp999上述名为
SHEET
的函数将返回工作表的名称Sheet=Sheets(number)。Name
我建议你们两个都查阅这方面的帮助,自己做一个测试。从“返回参考图纸的图纸编号”的帮助中,快速测试表明这是正确的。@martinp999我认为您误解了这里的要点。我现在将上述函数重命名为SHEETNAME,它根据作为参数发送的数字返回图纸名称。这和您引用的内容无关。这只是巧合,上面的函数被逻辑命名为Sheet
。这将返回公式所在的工作表的名称。OP要求根据工作表在工作簿中的索引位置引用工作表。user2140173发布的UDF很好地处理了这个问题。@edata的回答也实现了这一点。