如何在INDIRECT函数中使用单元格引用

时间:2019-11-10 23:13:42

标签: excel excel-formula

我有几个单元格可以从多个工作表的单个单元格中计算总计,在这种情况下,是从Week中每个工作表中得出“ Y3”,其中n是1到10之间的整数:

=SUMPRODUCT(COUNTIF(INDIRECT("'Week"&{1,2,3,4,5,6,7,8,9,10}&"'!Y3"),"W"))

我想在我的工作簿中有一个单元格,其中包含A1:

1,2,3,4,5,6,7,9,10

这样,当我添加要计数的工作表时,我只能更新一个单元格。我尝试了几件事,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:2)

您的公式:=SUMPRODUCT(COUNTIF(INDIRECT("'Week"&{1,2,3,4,5,6,7,8,9,10}&"'!Y3"),"W"))

仅当您有10个名为Week1,Week2,Week3….Week10的工作表时,此公式才起作用

但是如果少于10张,例如Week1,Week2,Week3….Week9,您的公式将失败并返回"#REF!"错误

公式变通方法用IFERROR()包装并变成:

=SUMPRODUCT(IFERROR(COUNTIF(INDIRECT("'Week"&{1,2,3,4,5,6,7,8,9,10}&"'!Y3"),"W"),0))

但是,如果您希望公式具有动态效果,请在A1中输入:1,2,3,4,5,6,7,9,10

但是1,2,3,4,5,6,7,9,10是一个文本字符串,您需要将其转换为数组。使用FILTERXML()可以完成自Excel 2013起可用的工作

这是您需要通过按CTRL + SHIFT + ENTER而不是ENTER确认的数组公式:

=SUM(IFERROR(COUNTIF(INDIRECT("'Week"&FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b")&"'!Y3"),"W"),0))

编辑1:

然后

如果您还没有Excel 2013,则可以改用此较长数组(CSE)公式

=SUM(IFERROR(COUNTIF(INDIRECT("'Week"&TRIM(MID(SUBSTITUTE(","&A1,",",REPT(" ",99)),ROW(INDIRECT("1:"&LEN(A1)-LEN(SUBSTITUTE(A1,",",))+1))*99,99))&"'!Y3"),"W"),0))

之后,

您可以调整A1号而无需更改公式内容

答案 1 :(得分:1)

AFAIK,如果将工作表列表放在单个单元格中,则无法使用公式进行操作我的立场是正确的:请参阅bosco_yip的答案! (尽管您可以使用UDF)。

但是,如果将工作表列表放在一列中,则可以执行此操作(使用OFFSET,该列表是动态的,但必须是该列中的唯一数据。如果不合适,则有其他选择):

[Serializable]
    public class GameData : MonoBehavior
    {
        public float Health { get; set; }
    }

enter image description here

应用FILTERXML方法创建一个非数组公式

=SUMPRODUCT(COUNTIF(INDIRECT("'Week"&TRANSPOSE(OFFSET(A1,1,0,COUNTA(A:A)-1,1))&"'!Y3"),"W"))