忽略图表VBA中的空单元格

时间:2014-07-04 16:33:15

标签: excel vba excel-vba

我创建了一个宏,它产生一组两列和0到x行。(x =原始数据中的行数)。我正在用下一行代码绘制图表。

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

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

UPDATE1: 我需要使用colum图表,我将删除工作表中的任何过去的图表并添加一个新图表 感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

如果您的公式仅为前10个数字提供有用的值,之后为“空白”,请确保使用函数<#p>将'空白'替换为#NA

=IFERROR(YourCell x 1, NA())

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

  1. 空白或
  2. 插值
  3. 取而代之(取决于您的设置)

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

    应该从工作表(而不是模块)中的此事件处理程序调用重新调整图表类别和值数据大小的代码

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

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

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

答案 1 :(得分:0)

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