Excel でグラフからデータを抽出するマクロ

概要

Microsoft Excel では、データが外部ワークシートまたはブック内にある場合でも、グラフからデータを取得できます。 これは、グラフが使用できない、または何らかの形で破損している別のファイルから作成された、またはリンクされている場合に役立ちます。 グラフへのソース データが失われた場合でも、Microsoft Visual Basic for Applications マクロを使用して、グラフ自体からデータを取得できます。

詳細情報

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。

次のサンプル マクロは、作業中のブックの "ChartData" というワークシートにグラフのソース データを配置します。最初の列と最初の行から始めます。

  1. モジュール シートに次のマクロ コードを入力します。

    Sub GetChartValues()
       Dim NumberOfRows As Integer
       Dim X As Object
       Counter = 2
    
       ' Calculate the number of rows of data.
       NumberOfRows = UBound(ActiveChart.SeriesCollection(1).Values)
    
       Worksheets("ChartData").Cells(1, 1) = "X Values"
    
       ' Write x-axis values to worksheet.
       With Worksheets("ChartData")
          .Range(.Cells(2, 1), _
          .Cells(NumberOfRows + 1, 1)) = _
          Application.Transpose(ActiveChart.SeriesCollection(1).XValues)
       End With
    
       ' Loop through all series in the chart and write their values to
       ' the worksheet.
       For Each X In ActiveChart.SeriesCollection
          Worksheets("ChartData").Cells(1, Counter) = X.Name
    
          With Worksheets("ChartData")
             .Range(.Cells(2, Counter), _
             .Cells(NumberOfRows + 1, Counter)) = _
             Application.Transpose(X.Values)
          End With
    
          Counter = Counter + 1
       Next
    
    End Sub
    
  2. ブックに新しいワークシートを挿入し、名前を "ChartData" (引用符なし) に変更します。

  3. 基になるデータ値を抽出するグラフを選択します。

    注:

    グラフは、ワークシートまたは別のグラフ シートに埋め込むことができます。

  4. GetChartValues マクロを実行します。

    グラフのデータは、"ChartData" ワークシートに配置されます。

回復されたデータを使用してグラフを対話形式にするには、不足しているブックや破損したブックへのリンクを保持するのではなく、グラフを新しいデータ シートにリンクする必要があります。

  1. グラフを選択し、系列をクリックして、破損したブックまたは不足しているブックにグラフがリンクされているシート名を見つけます。 シート名は、数式バーの系列数式に表示されます。

    注:

    シート名は、"[Book1] などの角かっこで囲まれたブック名に従い、感嘆符 "!" の前に置く場合があります。(またはアポストロフィと感嘆符 "'!")セル参照の先頭を示します。 シート名には、閉じた角かっこ記号 "]" と感嘆符 (またはアポストロフィと感嘆符) の間の文字のみが含まれます。 アポストロフィが感嘆符の直前にある場合は、アポストロフィをシート名の最後の文字にすることはできません。

  2. ChartData という名前の新しいシートのタブをダブルクリックします。

  3. 強調表示されている "ChartData" の上に手順 1 の元のシート名を入力し、Enter キーを押します。 この名前は、破損したブックまたは不足しているブックのシート名と同じである必要があります。

  4. グラフとデータ シートでこのファイルを保存していない場合は、ファイルを保存します。

  5. Excel 2003 または Excel 2002 で、[編集] メニューの [リンク] をクリックし、[ソースの変更] をクリックします。

    Excel 2007 で、[データ] タブをクリックし、[Connenctions] グループの [リンクの編集] をクリックし、[ソースの変更] をクリックします。

  6. [ソース ファイル] ボックスで、変更するリンクを選択し、[ソースの変更] をクリックします。

  7. [リンクの変更] ダイアログ ボックスで、回復されたデータとグラフを含む新しいファイルを選択し、[OK] をクリックします。

  8. 次のエラー メッセージが表示される場合

    数式にワークシートへの無効な外部参照が含まれています。

    手順 3 で入力したシート名が元のシートと同じでない可能性があります。 手順 1 に戻るします。

  9. [ソース ファイル] ボックスが空白になる可能性があります。 これは、すべてのリンクが、見つからないファイルや破損したファイルではなく、アクティブなファイルを指していることを示します。 [閉じる] をクリックします。

これで、グラフは、作業中のブック内の名前が変更されたシート上の回復されたデータを参照して操作するようになりました。