サーチ…


範囲と固定名によるチャートの作成

チャートは、チャートデータを定義するSeriesオブジェクトで直接操作することで作成できます。既存のグラフを持たないSeriesに到達するには、 ChartObjectれたWorksheet ChartObjectを作成してからChartオブジェクトを取得します。 Seriesオブジェクトを操作することのXValuesRangeオブジェクトを参照して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伝播することを意味します。

SERIES式のデータとチャート

チャートをグリッドに配置する

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

いくつかのチャートの結果

これらの写真は、チャートの元のランダムなレイアウトと、上記のコードを実行するグ​​リッドを示しています。

いくつかのチャートの前に

グラフのグリッド



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow