忽略图表VBA中的空单元格

我创build了一个macros,其结果是一组两列,0到x行(x =原始数据中的行数)。 我正在用下一行代码绘制图表。

Set MyChart = Sheet3.Shapes.AddChart(xlColumnClustered).Chart MyChart.SetSourceData Source:=Sheet2.Range("$A$1:$A$10,$b$1:$b$10") 

这将只绘制前10名的数据。问题是,有些情况下,我有less于10行。 那么,有没有办法让VBA忽略最后一个数据单元下的空单元对?

更新1:我需要使用一个柱状图,我删除表中的任何过去的图表,并添加一个新的谢谢。

这本身不是一个VBA编程问题。 您需要使用图表的XY分散types,其中您在电子表格中指定了X轴和Y轴。

然后,您可以将图表设置设置为“忽略隐藏和空白单元格”

然后你可以使用相同的代码将图表更新到任何范围,即使有额外的单元格。

如果你的公式只给出了前10个数字的有用值,之后给出'空白',确保你用#NAreplace'空白'使用函数

 =IFERROR(YourCell x 1, NA()) 

虽然NA()在电子表格上看起来很丑,但它对于图表来说非常好,因为图表简单地忽略了这一点,然后可以将图表设置为绘图

  1. 空白或
  2. 插值

在它的地方(取决于你的设置)

对于任何其他types的图表,除非使用WorkSheet Change事件跟踪电子表格中的更改,否则无法执行此操作。

而重新调整图表类别和值数据的代码应该从Worksheet中的这个事件处理程序(而不是一个模块)中调用,

 Private Sub Worksheet_Change(ByVal Target As Range) ' Code to handle the change, stuffing the chart category and value data goes here End Sub 

在最糟糕的情况下,您无法更改范围大小,您可以在电子表格中将范围声明为dynamic范围,并按名称引用范围。

在这个MSFT知识库中,您将获得有关dynamic定义范围的信息。 http://support.microsoft.com/kb/830287

 Sub test() Dim MyChart As Chart Dim Ws As Worksheet Set Ws = Sheet3 With Ws If .ChartObjects.Count > 0 Then .ChartObjects.Delete End If Set MyChart = .Shapes.AddChart(xlColumnClustered).Chart MyChart.SetSourceData Source:=Sheet2.Range("a1").CurrentRegion End With End Sub