Excel 基于单元格中的值的图表范围

Excel 基于单元格中的值的图表范围,excel,vba,Excel,Vba,我需要创建一个折线图,根据单元格中的值选择一系列数据。例如,在单元格C1中,我写入A1:B4,这意味着图表是单元格A1到B4中数据的显示。如果我简单地将单元格C1中的值更改为A1:B9,我希望图表显示这个范围的数据-你得到了点。这应该不会太难,但我没有正确理解(由于某些原因,网络上充满了不适用于我的应用程序的相同示例) 我尝试过使用命名范围函数。我仍然认为这是一条路,但我需要一些帮助。这不需要VBA 让我们开始将以下工作表命名为Sheet1: 现在我们需要三个命名范围。一个用于整个范围,我们得

我需要创建一个折线图,根据单元格中的值选择一系列数据。例如,在单元格C1中,我写入A1:B4,这意味着图表是单元格A1到B4中数据的显示。如果我简单地将单元格C1中的值更改为A1:B9,我希望图表显示这个范围的数据-你得到了点。这应该不会太难,但我没有正确理解(由于某些原因,网络上充满了不适用于我的应用程序的相同示例)


我尝试过使用
命名范围
函数。我仍然认为这是一条路,但我需要一些帮助。

这不需要
VBA

让我们开始将以下工作表命名为
Sheet1

现在我们需要三个命名范围。一个用于整个范围,我们得到间接形式
C1
,一个用于类别,它是整个范围的左列,另一个用于值,它是整个范围的右列

因此,在名称管理器中,我们创建以下命名范围:

注意:所有命名范围都在工作表
Sheet1
的范围内,而不在工作簿范围内。因此,在创建命名范围时,始终选择范围
Sheet1
,而不是
Workbook

名称
myRange
指的是
=间接(Sheet1!$C$1)
。所以它从那个单元格值得到它的范围

名称
myCategories
=索引(Sheet1!myRange,,1)
。从
myRange
的列
1
中获取所有行(因为没有指定特殊行)

名称
myValues
=索引(Sheet1!myRange,,2)
。从
myRange
的列
2
中获取所有行(因为没有给出特殊行)

现在我们可以插入一个图表(例如饼图)

然后右键单击图表,然后选择
selectdata

首先,我们删除左侧图例条目(系列)下方的所有当前系列(如有)。然后我们添加一个新系列。在系列值中:我们将公式
=Sheet1!我的值
正常

在水平(类别)轴标签下方的右侧,我们单击编辑并输入公式
=Sheet1!我的类别
正常

然后对整个选择数据对话框执行
OK

现在,如果我们将
C1
的单元格值更改为
INDIRECT
可以解释为单元格范围的值,那么图表也会更改


要同时提供
VBA
解决方案,请执行以下操作:

让我们拿一张和上面一样的纸。
A1:B8中的数据和
C1中的范围地址

现在创建通缉图。它必须是该工作表中唯一的图表对象

现在将以下代码放入
Sheet1
的工作表模块中(右键单击工作表选项卡,然后单击
查看代码
):


如果
C1
(第1行,第3列)的值发生变化,则此代码会导致图表的源数据发生变化。

不需要
VBA

让我们开始将以下工作表命名为
Sheet1

现在我们需要三个命名范围。一个用于整个范围,我们得到间接形式
C1
,一个用于类别,它是整个范围的左列,另一个用于值,它是整个范围的右列

因此,在名称管理器中,我们创建以下命名范围:

注意:所有命名范围都在工作表
Sheet1
的范围内,而不在工作簿范围内。因此,在创建命名范围时,始终选择范围
Sheet1
,而不是
Workbook

名称
myRange
指的是
=间接(Sheet1!$C$1)
。所以它从那个单元格值得到它的范围

名称
myCategories
=索引(Sheet1!myRange,,1)
。从
myRange
的列
1
中获取所有行(因为没有指定特殊行)

名称
myValues
=索引(Sheet1!myRange,,2)
。从
myRange
的列
2
中获取所有行(因为没有给出特殊行)

现在我们可以插入一个图表(例如饼图)

然后右键单击图表,然后选择
selectdata

首先,我们删除左侧图例条目(系列)下方的所有当前系列(如有)。然后我们添加一个新系列。在系列值中:我们将公式
=Sheet1!我的值
正常

在水平(类别)轴标签下方的右侧,我们单击编辑并输入公式
=Sheet1!我的类别
正常

然后对整个选择数据对话框执行
OK

现在,如果我们将
C1
的单元格值更改为
INDIRECT
可以解释为单元格范围的值,那么图表也会更改


要同时提供
VBA
解决方案,请执行以下操作:

让我们拿一张和上面一样的纸。
A1:B8中的数据和
C1中的范围地址

现在创建通缉图。它必须是该工作表中唯一的图表对象

现在将以下代码放入
Sheet1
的工作表模块中(右键单击工作表选项卡,然后单击
查看代码
):


如果
C1
(第1行,第3列)的值发生变化,此代码将导致图表的源数据发生变化。

您肯定尝试过其中一个示例,但出现了问题。如果你展示了你所做的尝试以及问题的症结所在,其他人会更容易帮助你。我做过,比如这一次:,但没有用。我猜这应该是一个快速修复的人知道。它是什么意思“希望图表显示此范围的数据”?图表总是需要两个范围,一个是类别(或x值),另一个是类别值(或y值)。当然,你一定试过其中一个
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim oChartObject As ChartObject
 Dim oChart As Chart
 If Target.Row = 1 And Target.Column = 3 Then
  On Error Resume Next
  Set oChartObject = Me.ChartObjects(1)
  Set oChart = oChartObject.Chart
  oChart.SetSourceData Source:=Me.Range(Target.Value)
  On Error GoTo 0
 End If
End Sub