Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在单元格中按编号而不是名称引用图纸_Excel_Vba_Excel Formula - Fatal编程技术网

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的回答也实现了这一点。