Excel Tips by pPoy

トップへ←Top    VBAへVBA  VBA基礎へVBA 基礎  一般へ一般  

Macro リンク切れのグラフから データを新規シートに書き出し後、
グラフデータとして再設定するマクロ (Excel2002,Excel2003)
他の Book からグラフをコピーした後で、コピー元の Book が行方不明になり、グラフのリンクが切れてしまうことがあります。
元の Book が見つかる場合は、データも一緒にコピーしてグラフのリンクを再設定すれば良いのですが、
元の Book が無い場合は、非常に困ります。

以下は、リンク切れのグラフから元の値を取り出し、そのデータをグラフデータとして再設定する方法です。
≪例≫
Graph

←左のような、グラフのみの Book があります。

このグラフは別の Book から貼り付けたため、
グラフの元となるデータは存在しません。

Book を開くたびに、
「このブックには、他のデータソースへの
リンクが設定されています」 と警告が出ます。
この頁のTOPへTop
標準モジュールに、以下のコードを貼り付けてください。

Sub CreatGraphData()
On Error GoTo Err_CreatGraphData
'リンク切れのグラフから、データを新規シートに書き出し後、
'グラフデータとして再設定するマクロ 2010/02/21 pPoy
'予め対象となるグラフを選択しておくこと
    Dim myGraph As Object                   'ActiveChart
    Dim cntRows As Integer                  '系列内データ数
    Dim X As Object                         'グラフ系列
    Dim i As Integer
    i = 2
    
    'グラフ取得
    If ActiveChart Is Nothing Then
        MsgBox "グラフを1つ選択してください!", vbOKOnly
        Exit Sub
    End If
    Set myGraph = ActiveChart
    '最初のデータ系列の値の個数
    cntRows = UBound(myGraph.SeriesCollection(1).Values)
    
    '新規シート追加
    Worksheets.Add
    With ActiveSheet
        .Cells(1, 1) = "X軸"
    
        'A列にX軸の値を抽出後書き出し(配列内の値を縦横変換後)
        .Range(.Cells(2, 1), .Cells(cntRows + 1, 1)) = _
        Application.Transpose(myGraph.SeriesCollection(1).XValues)
    
        For Each X In myGraph.SeriesCollection
            'B列から順番に書き出す
            '系列名
            .Cells(1, i) = X.Name
            '系列内の値
            .Range(.Cells(2, i), .Cells(cntRows + 1, i)) = _
            Application.Transpose(X.Values)
            i = i + 1
        Next X
        
        '☆書き出したデータをグラフデータとして再設定
    '手動で再設定する場合は、この下をコメントアウトしてください
        myGraph.SetSourceData _
            Source:=.Range("A1").CurrentRegion, PlotBy:=xlColumns
    '手動で再設定する場合は、この上までコメントアウトしてください
    End With
    
Exit_CreatGraphData:
    Set myGraph = Nothing
    Exit Sub

Err_CreatGraphData:
    MsgBox Err.Description, vbExclamation + vbOKOnly
    Resume Exit_CreatGraphData
End Sub
この頁のTOPへTop
≪使い方≫

ワークシート上の グラフを1つ選択してから、このマクロを実行します。
※ 「メニュー」−「ツール」−「マクロ」−「マクロ」−「CreatGraphData」 を選択して 「実行」 を押します。
DATA


グラフのあるシートの左側に、新規シートが追加されます。

A列には、X軸の値が書き出されます。 
B列から右横は、系列毎の値です。



グラフのリンクも、新規シートに書き出されたデータに、再設定されています。
SetSourceData
≪注意≫
  • このマクロ実行する前に、予めグラフを1つだけ選択しておくことが必要です。
    複数のグラフを選択した状態では このマクロは動きません。

  • ワークシート上に貼り付けたグラフだけでなく、グラフシートのグラフからもデータを取り出せます。

  • マクロを実行するたびに、新規シートが一枚追加され、グラフデータのリンク先が新しいシートに変更されます。

  • 複雑なグラフでは、リンクの再設定で失敗する可能性があります。
    例えば、グラフ系列を飛び飛びに設定してある場合では、全ての系列が正しく設定できません。

    その場合は、リンクの再設定の箇所 (「☆書き出したデータをグラフデータとして再設定」 の下の行) を
    コメントアウトして実行し、リンク再設定は値を確認しながら手動で行ってください。

  • このマクロでリンクの再設定を行ったグラフは元に戻せません。
    必ずバックアップを取ってからテストしてください。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

Copyright(C) pPoy 2010