使用INDIRECT的动态图表范围:该功能无效(尽管范围突出显示)

时间:2013-08-16 11:53:51

标签: excel dynamic range excel-formula excel-indirect

我正在尝试使用INDIRECT函数创建一个动态构建范围的图表。 Excel确实使用INDIRECT识别我创建的范围,因为它突出显示了工作表上的相应范围:

enter image description here

但是在保存图表时,我收到一条错误消息,指出该功能无效:

enter image description here

是否有人知道问题是什么/如何创建从特定起点到特定终点的动态图表范围?

PS:You can download the above spreadsheet here。我使用的公式:
=INDIRECT("sheet!"&E2&":"&E3)

7 个答案:

答案 0 :(得分:20)

您尝试这样做的方式是不可能的。图表数据范围必须有固定的地址。

有一种解决方法,那就是使用命名范围

将数据中所需的行数放入单元格(例如E1)中 因此,使用您的示例,我将Number of Rows放在 D1 中,将6放在 E1

在名称管理器中,定义数据和标题的名称 我使用了 xrange yrange ,并将它们定义为:

  

xrange:= OFFSET(Sheet1!$ A $ 2,0,0,Sheet1!$ E $ 1)
  yrange:= OFFSET(Sheet1!$ B $ 2,0,0,Sheet1!$ E $ 1)

现在,在您的图表中 - 您需要知道工作簿的名称(一旦设置完毕,Excel的跟踪更改功能将确保引用保持正确,无论是否重命名)

Chart data range留空 对于Legend Entries (Series),像往常一样输入标题,然后输入您为数据定义的名称(请注意,工作簿名称​​必需以使用命名范围)
data points

对于Horizontal (Category) Axis Labels,输入您为标签定义的名称
data labels

现在,通过更改E1中的数字,您将看到图表更改:
6 in E1 4 in E1

答案 1 :(得分:16)

Mine与Sean的优秀答案类似,但允许开始和结束日。首先创建两个命名范围,使用索引/匹配公式根据E2和E3选择开始和结束日期:

<强> rngDay

=INDEX(Sheet1!$A:$A,MATCH(Sheet1!$E$2,Sheet1!$A:$A,0)):INDEX(Sheet1!$A:$A,MATCH(Sheet1!$E$3,Sheet1!$A:$A,0))

<强> rngValue

=INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$2,Sheet1!$A:$A,0)):INDEX(Sheet1!$B:$B,MATCH(Sheet1!$E$3,Sheet1!$A:$A,0))

然后,您可以单击图表中的系列并将公式修改为:

=SERIES(Sheet1!$B$1,Sheet1!rngDay,Sheet1!rngValue,1)

enter image description here

关于如何在图表中使用动态范围,这是一个很好的Chandoo post

答案 2 :(得分:3)

对于比特和谷歌的另一个答案..

如果您仍想参考开始和结束单元格,则需要为日期范围和值范围添加单独的公式。公式如下,屏幕截图显示了使用的公式。

日间范围:

="Sheet1!"&$F$2&":"&ADDRESS(ROW(INDIRECT($F$3)),COLUMN(INDIRECT($F$2)))

值范围:

="Sheet1!"&ADDRESS(ROW(INDIRECT($F$2)),COLUMN(INDIRECT($F$3)))&":"&$F$3

enter image description here

然后添加两个引用这些单元格的INDIRECT值的范围

按Ctrl + F3,单击“新建”,然后添加名为“chart_days”的新范围,参考=INDIRECT(Sheet1!$F$4);以及名为“chart_values”的新范围,指的是=INDIRECT(Sheet1!$F$5)

最后,在您的图表中,添加一个引用=nameOfYourWorkbook!chart_values

的系列

并修改类别以引用=nameOfYourWorkbook!chart_days

答案 3 :(得分:0)

我使用OFFSET创建一个已定义的名称公式,以便我可以定义数据的所有范围,允许我有一个开始结束日期(或任何数据集的开始和结束位置)。

对于一个简单的图形,我按如下方式定义名称CategoryLabels:

= OFFSET($A$5;  (InicitialMonth-1);  0;  LastMonth - (InitialMonth-1))

和DataCars如下:

= OFFSET($B$5;  (InicitialMonth-1);  0;  LastMonth - (InitialMonth-1))

您必须按照相同的步骤定义与要包含的系列一样多的名称。在这个简单的案例中,我只包括汽车销售。

初始月份和上个月是为单个单元格定义的范围名称,用于指示图表的哪些月份(从开始到结束月份)。

请注意,正如Sean Cheshire和其他人所解释的那样,要使用图表值的名称,必须包含电子表格的名称。

答案 4 :(得分:0)

根据您显示的公式:= INDIRECT(“sheet!”&amp; E2&amp;“:”&amp; E3) 你没有正确命名表格。

我原以为是Sheet1!或Sheet2!等等 您的公式解析为= sheet!E2:E3不是有效地址。您获得的错误消息表示Excel无法解析对INDIRECT的输入。 INDIRECT 一个有效的函数,因此您提供的参数必须无效。

上述所有表明工作表名称的答案已经纠正了您的错误但未提及......;)

答案 5 :(得分:0)

具有间接功能的命名公式不适用于图表。它适用于其他来源,因为您的所需动态源将突出显示,但是当您在图表中时,它将不会被评估。希望微软能够解决这个问题。

答案 6 :(得分:0)

当折线图的范围是一个命名变量,并且该变量具有通过单元格到某个范围的INDIRECT()引用时,则该变量必须至少具有2个INDIRECT(),并以逗号分隔。