MS Excel:无需使用宏即可将工作表名称添加到单元格中

MS Excel:无需使用宏即可将工作表名称添加到单元格中

我有一本包含多张工作表的工作簿,我想用一张单独的工作表来显示来自前几张工作表的项目。因此,我制作了标签为“桌子”、“椅子”、“架子”和“结果”的工作表。每张家具工作表都记录了有多少件损坏的物品,“结果”工作表一目了然地显示了所有信息。

每个家具表都有一个“状态”列,表示一件家具是损坏的还是完好的,我使用 COUNTIF() 来总结结果,例如:

Furniture | Number of broken
-----------------------------
Chairs    | =COUNTIF(Chairs!G:G, "Broken")

这样我就能计算出“椅子”工作表中损坏物品的数量。但是,如果我将“椅子”工作表重命名为其他名称,我还必须重命名“家具”下的“椅子”单元格。COUNTIF() 会自动重命名引用的工作表,我正在寻找类似的功能,以便在单元格中仅显示工作表的名称。

我找到了这个功能:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

但它只显示当前电子表格的名称。有没有办法修改它以引用另一个工作表而不使用 VBA 脚本?

答案1

在“家具”下,您可以创建一个工作表名称列表:
创建一个定义名称,将其命名为 SheetNames,
指的是写入: =GET.WORKBOOK(1)&T(NOW())
在 A2 中,例如在“家具”下的结果表中写入以下内容:
=INDEX(MID(SheetNames,FIND("]",SheetNames)+1,255),ROWS(A$1:A1))

并将其向下拖动以包含所有工作表,每当您更改工作表的名称时,它都会反映在列中
如果您得到#REF!这意味着没有更多的工作表现
在您必须在 countif 中使用 Indirect 来反映工作表名称:

=COUNTIF(INDIRECT(A2&"!G:G"),"Broken")
你可以拖动它,
INDIRECT(A2&"!G:G")这相当于Chairs!G:G")

答案2

是的,

经过修改后,您的公式将正常工作:

=MID(CELL("filename",chairs!A1),FIND("]",CELL("filename",chairs!A1))+1,255)

CELL 函数返回第二个参数中指定的单元格的信息。因此,通过将其从 A1 更改为 chairs!A1,信息来自 chairs 工作表,而不是默认工作表(即输入公式的工作表)。

相关内容