次の方法で共有


グラフの操作

Word 2007 Service Pack 2 (SP2) 以降では、Word の VBA オブジェクト モデルを使用してグラフにプログラムからアクセスし、操作できます。 Word のグラフ用オブジェクトを描画するための描画レイヤーは Office 共有で Excel に実装されているものと同じなので、Excel のグラフ操作オブジェクト モデルを使い慣れている場合は、グラフを操作する Excel VBA コードを簡単に Word VBA コードに移行できます。

使い方

Word では、グラフを Chart オブジェクトで表します。 Chart オブジェクトは InlineShape または Shape に含まれています。 Document オブジェクトのInlineShapes コレクションまたは Shapes コレクションを使用して、新規のグラフを追加するか、既存のグラフにアクセスします。 いずれのコレクションでも、新しいグラフを追加するには、グラフの種類と文書内の場所を指定して AddChart メソッドを使用します。

HasChart プロパティを使用して、InlineShape オブジェクトまたは Shape オブジェクトにグラフが含まれているかどうかを判断します。 HasChart が True を返す場合、Chart プロパティを使用してグラフを表す Chart オブジェクトへの参照を取得できます。 この時点で、実装は Excel の実装とほぼ同じであり、ほとんどの場合、2 つのプログラム間で VBA コードを転送できます。

たとえば、次の VBA コード例では、新しい 2-D 積み上げ縦棒グラフを Excel の作業中のワークシートに追加し、そのグラフのソース データを Sheet1 ワークシートの範囲 A1:C3 に設定します。

Sub AddChart_Excel()
    Dim objShape As Shape
    
    ' Create a chart and return a Shape object reference.
    ' The Shape object reference contains the chart.
    Set objShape = ActiveSheet.Shapes.AddChart(XlChartType.xlColumnStacked100)
    
    ' Ensure the Shape object contains a chart. If so,
    ' set the source data for the chart to the range A1:C3.
    If objShape.HasChart Then
        objShape.Chart.SetSourceData Source:=Range("'Sheet1'!$A$1:$C$3")
    End If
End Sub

一方、次の VBA コード例では、新しい 2-D 積み上げ縦棒グラフを作業中の文書に追加し、そのグラフのソース データをグラフに関連付けられたグラフ データの範囲 A1:C3 に設定します。

Sub AddChart_Word()
    Dim objShape As InlineShape
    
    ' Create a chart and return a Shape object reference.
    ' The Shape object reference contains the chart.
    Set objShape = ActiveDocument.InlineShapes.AddChart(XlChartType.xlColumnStacked100)
    
    ' Ensure the Shape object contains a chart. If so,
    ' set the source data for the chart to the range A1:C3.
    If objShape.HasChart Then
        objShape.Chart.SetSourceData Source:="'Sheet1'!$A$1:$C$3"
    End If
End Sub

Word の Chart オブジェクトと Excel の ChartObject オブジェクトの主な相違点

多くの場合、Excel と Word でのグラフの操作方法は共通ですが、次の主な相違点もあります。

  • Word でプログラムから ChartData オブジェクトを実行するには Excel を実行する必要があります。

  • グラフ シートを操作するためのグラフのプロパティおよびメソッドは、実装されません。 グラフ シートは Excel に固有の概念です。 グラフ シートは Word では使用されないため、グラフ シートを参照または操作するためのメソッドやプロパティは、該当するアプリケーションでは無効になっています。

  • Excel で通常 Range オブジェクト参照を取得するプロパティとメソッドが、Word で範囲アドレスを取得するようになりました。 Word の Range オブジェクトは、Excel の Range オブジェクトとは異なります。 混乱を防ぐために、Word のグラフ オブジェクト モデルでは、Excel の Range オブジェクトを受け入れるプロパティとメソッド (Chart オブジェクトの SetSourceData メソッドなど) で、"='Sheet1'!$A$1:$D$5" などの範囲アドレス文字列を受け入れます。

  • グラフの基になるリンク データまたは埋め込みデータにアクセスできるように、新しいオブジェクト ChartData が Word の VBA オブジェクト モデルに追加されました。 Word では、グラフごとにそれを描画するためのデータが関連付けられます。 グラフのデータは外部の Excel ブックにリンクされるか、グラフ自体の一部として埋め込まれます。 ChartData オブジェクトは、Word でグラフのデータへのアクセスをカプセル化します。 たとえば、次の VBA コード例では、Word の作業中の文書に含まれる各グラフのグラフ データを表示し、最小化します。

Sub ShowWorkbook_Word() 
    Dim objShape As InlineShape 
     
    ' Iterates each inline shape in the active document. 
    ' If the inline shape contains a chart, then display the 
    ' data associated with that chart and minimize the application 
    ' used to display the data. 
    For Each objShape In ActiveDocument.InlineShapes 
        If objShape.HasChart Then 
 
            ' Activate the topmost window of the application used to 
            ' display the data for the chart. 
            objShape.Chart.ChartData.Activate 
             
            ' Minimize the application used to display the data for 
            ' the chart. 
            objShape.Chart.ChartData.Workbook.Application.WindowState = -4140 
        End If 
    Next 
End Sub 

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。