サーチ…
範囲と固定名によるチャートの作成
チャートは、チャートデータを定義する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
いくつかのチャートの結果
これらの写真は、チャートの元のランダムなレイアウトと、上記のコードを実行するグリッドを示しています。
前
後




