2

我有一个电子表格,它链接到其他几个电子表格,以提取编译成一张表的数据;我的任务是修改工作表以绘制这些数据。一个人的报告中每个月有一行 12 个插槽;如果一个人在一个月内工作,则该月将显示在相应的插槽中。对于图表,我已经想出使用动态名称范围,以便图表中的月数等于该行中存在的月数;唯一的问题是起始点会根据一个人开始的月份而变化。

我可以制作一个相当大的嵌套 if 语句,但这似乎不是解决我的问题的好方法。有没有办法让 VBA 脚本更改动态名称范围的值或直接修改图表的值?如果这不是一个可行的选择,除了动态命名范围之外,还有其他方法可以解决这个问题吗?

我无法更改此报告表的行为方式,因为这是与工作相关的电子表格,并且出于报告原因,他们希望它是这样的;我只是想添加图形功能。

例子:

https://www.dropbox.com/s/zn6yt4l6kjvwq33/Example1.xlsx https://www.dropbox.com/s/j88tgoik68s4lhx/Example2.xlsx

在第一个示例中,当您从代理名称旁边的下拉框中选择“第二个”时,您会看到一个问题示例。它在图表中包含无意义的数据。

在第二个示例中,我通过将 if 语句添加到图表中使用的动态命名范围来解决问题;但是正如你所看到的,包括 2 个月,它现在已经很庞大了,而且要包括所有 12 个月,这几乎是不可能的。如果我要添加一个三月份开始的第三个人,他们也不会在第二个例子中工作。

有没有办法可以使动态名称范围中的值可以通过 VBA 更改?我可以直接使用 VBA 修改图表的值吗?有没有办法在不使用 VBA 的情况下绕过这个问题?

谢谢。

4

2 回答 2

0

(我不是 100% 确定我已经理解了这个问题,但这可能至少有助于更接近......)

尝试定义三个名称,如下所示:

start_month
data 
chart_data

其中start_month包含您要绘制图表的列数,data是所有十二列数据,类似于=OFFSET($C$1,0,0,COUNT($A:$A),12)chart_data从数据中选择您想要的列,例如=INDEX(data, , start_month)

WorkbookName!chart_data现在,使用工作簿的名称将图表的系列设置为 。随着start_month值的变化,图表中显示的值也会发生变化。

于 2013-04-16T08:11:57.560 回答
0

Name您可以在 VBA 中添加或修改 a ,例如:

Dim nm As Name
Dim rng As Range

'Here, you could use a more complicated expression'
' to derive the proper address dynamically.'
Set rng = Sheets("Sheet1").Range("A2:A25")

'Now, add a Name to the workbook:'
Set nm = ActiveWorkbook.Names.Add("My_Name", rng)

使用一些字符串函数/变量,您可以在 VBA 中派生/计算范围地址。

于 2013-04-16T15:01:35.617 回答