向图表数据源添加零

时间:2012-05-22 08:31:20

标签: excel vba

我想将数字(0)添加到值中,并发现它有点麻烦。 Excel将宏记录为

Sub Makro2()
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).XValues = _
        "='Sheet'!$C$221;'Sheet'!$C$223;'Sheet'!$C$225"
    ActiveChart.SeriesCollection(2).Values = _
        "='Sheet'!$B$222;'Sheet'!$B$224;'Sheet'!$B$226"
End Sub

但是当我尝试使用我的代码时,我会收到错误。

Dim lineSeries1 As Range
Dim lineSeries2 As Range
With ActiveChart.SeriesCollection.NewSeries
    .Values = "={0;100}" 'It works 
    .Name = ""
    .XValues = "={0;100}" 'It works 
End With

With ActiveChart.SeriesCollection.NewSeries
    .Values = lineSeries1 ' + {0} or & SomeCellWithZero.Address
    .Name = ""
    .XValues = lineSeries2  ' + {0} or & SomeCellWithZero.Address
End With

所以问题是如何为值添加零?

1 个答案:

答案 0 :(得分:2)

就个人而言,我会使我的范围变大一个单元格并添加一个恒定的零值。如果由于某种原因这是不可能的,那么下面的内容可能会有所帮助; - )

这是一个稍微迂回的方式到达那里。有可能用更少的步骤来完成它,但我还不知道如何。

我将使用VBA函数从原始范围构建一个包含零的新数组。我将零置于数组的开头,改变代码以获得不同的东西。这是VBA功能:

Public Function PrependZero(rng As range)    
Dim val As Variant, res As Variant
Dim idx As Long
    val = Application.Transpose(rng.Columns(1).Value) ' get range values as a 1-dimensional array, assumes values are in a column
    ReDim res(LBound(val) To UBound(val) + 1) ' array to hold the extended values
    res(LBound(res)) = 0 ' add the fixed value        
    For idx = LBound(val) To UBound(val)
        res(idx + 1) = val(idx) ' copy the other values
    Next        
    PrependZero = res        
End Function

Excel似乎不喜欢我们在系列定义中使用VBA函数,所以我们需要添加一些间接来欺骗它。创建一个新的命名公式(公式...定义名称)。我打电话给我的YSeries并将“引用”值设置为=PrependZero(Sheet1!$A$2:$A$6),使用我的Y值范围作为函数的输入。

在图表系列定义中使用命名公式 :将“Series Y Values”设置为[YourWorkbookNameHere]!YSeries(使用您在上面创建的任何名称)。

如果你想对X值做同样的事情,那么相同的方法应该有效。