サーチ…
範囲と固定名によるチャートの作成
チャートは、チャートデータを定義するSeries
オブジェクトで直接操作することで作成できます。既存のグラフを持たないSeries
に到達するには、 ChartObject
れたWorksheet
ChartObject
を作成してからChart
オブジェクトを取得します。 Series
オブジェクトを操作することのXValues
、 Range
オブジェクトを参照してValues
およびXValues
設定できることです。これらのデータプロパティは、これらの範囲への参照を持つSeries
を適切に定義します。このアプローチの欠点は、 Name
設定するときに同じ変換が処理されないことです。固定値です。元のRange
内の基礎データとは調整されません。 SERIES
公式をチェックして、その名前が固定されていることは明らかです。これは、 SERIES
式を直接作成することによって処理する必要があります。
チャートの作成に使用されるコード
このコードには、 Chart
およびWorksheet
ための余分な変数宣言が含まれています。これらは使用しない場合は省略することができます。ただし、スタイルやその他のチャートのプロパティを変更している場合は便利です。
Sub CreateChartWithRangesAndFixedName()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get reference to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
ser.Values = yData
ser.XValues = xData
ser.Name = serName
ser.ChartType = xlXYScatterLines
End Sub
コード実行後の元のデータ/範囲と結果のChart
SERIES
式には、それを作成したRange
への参照ではなく、シリーズ名の"B"
含まれていることに注意してください。
空のグラフを作成する
大部分のチャートコードの出発点は、空のChart
を作成することです。このChart
は、アクティブなデフォルトチャートテンプレートの対象であり、実際には空ではない(テンプレートが変更されている場合)可能性があります。
ChartObject
のキーは、その位置を決定することです。コールの構文はChartObjects.Add(Left, Top, Width, Height)
です。 ChartObject
を作成したら、 Chart
オブジェクトを使用してChart
を実際に変更することができます。 ChartObject
は、 Shape
ように動作し、チャートをシート上に配置します。
空のグラフを作成するコード
Sub CreateEmptyChart()
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (0, 0) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'additional code to modify the empty chart
'...
End Sub
結果のチャート
SERIES式を変更してグラフを作成する
新しいChart
およびSeries
オブジェクト(特にダイナミックSeries
名の場合)を完全に制御するには、 SERIES
式を直接変更する必要があります。 Range
オブジェクトを設定するプロセスは簡単で、主な障害は単純にSERIES
式の文字列構築です。
SERIES
式の構文は次のとおりです。
=SERIES(Name,XValues,Values,Order)
これらの内容は、データ項目の参照値または配列値として指定できます。 Order
は、チャート内の系列の位置を表します。シート名で完全修飾されていないと、データへの参照は機能しません。作業式の例については、既存のシリーズをクリックし、数式バーを確認してください。
SERIES
式を使用してグラフを作成し、データを設定するためのコード
SERIES
式を作成する文字列構築では、 .Address(,,,True)
使用されます。これにより、シート名の完全修飾アドレスが含まれるように外部範囲参照が使用されます。 シート名が除外されているとエラーになります 。
Sub CreateChartUsingSeriesFormula()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
'set the SERIES formula
'=SERIES(name, xData, yData, plotOrder)
Dim formulaValue As String
formulaValue = "=SERIES(" & _
serName.Address(, , , True) & "," & _
xData.Address(, , , True) & "," & _
yData.Address(, , , True) & ",1)"
ser.Formula = formulaValue
ser.ChartType = xlXYScatterLines
End Sub
元のデータと結果チャート
このグラフでは、シリーズ名が目的のセルの範囲で正しく設定されていることに注意してください。これは、更新がChart
伝播することを意味します。
チャートをグリッドに配置する
Excelでのチャートの一般的な雑用は、複数のチャートのサイズとレイアウトを単一シート上で標準化しています。手動で行う場合は、グラフのサイズを変更したり、セルの境界線に「スティック」するようにグラフを移動しながら、 Altキーを押したままにすることができます。これはカップルチャートでも機能しますが、VBAのアプローチはずっと簡単です。
グリッドを作成するコード
このコードは、指定された(上、左)位置から開始し、定義された数の列と、定義された共通グラフのサイズで、グラフのグリッドを作成します。チャートは作成された順番に配置され、エッジを囲んで新しい行を形成します。
Sub CreateGridOfCharts()
Dim int_cols As Integer
int_cols = 3
Dim cht_width As Double
cht_width = 250
Dim cht_height As Double
cht_height = 200
Dim offset_vertical As Double
offset_vertical = 195
Dim offset_horz As Double
offset_horz = 40
Dim sht As Worksheet
Set sht = ActiveSheet
Dim count As Integer
count = 0
'iterate through ChartObjects on current sheet
Dim cht_obj As ChartObject
For Each cht_obj In sht.ChartObjects
'use integer division and Mod to get position in grid
cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
cht_obj.Width = cht_width
cht_obj.Height = cht_height
count = count + 1
Next cht_obj
End Sub
いくつかのチャートの結果
これらの写真は、チャートの元のランダムなレイアウトと、上記のコードを実行するグリッドを示しています。
前
後