0

数値 (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

問題は、値にゼロを追加する方法です。

4

1 に答える 1

2

個人的には、範囲を 1 セル大きくして、一定のゼロ値を追加します。何らかの理由でそれが不可能な場合は、次のことが役立つ場合があります;-)

ここからは少し遠回りして行きます。より少ないステップでそれを行うことは可能かもしれませんが、まだ方法がわかりません。

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 関数を使用することを好まないようです。そのため、それを欺くために間接的な追加が必要です。新しい名前付き式を作成します (式...名前の定義)。私は私のものを呼び出し、関数への入力として Y 値の範囲を使用して、YSeries「参照先」の値を に設定しました。=PrependZero(Sheet1!$A$2:$A$6)

この名前付きの式は、チャート シリーズの定義で使用できます。「Series Y Values」を[YourWorkbookNameHere]!YSeries(上記で作成した名前を使用) に設定します。

X 値に対して同じことを行いたい場合は、同じアプローチが機能するはずです。

于 2012-05-22T09:12:00.927 に答える