| Excel Tips by pPoy |
| Macro | リンク切れのグラフから データを新規シートに書き出し後、 グラフデータとして再設定するマクロ (Excel2002,Excel2003) |
他の Book からグラフをコピーした後で、コピー元の Book が行方不明になり、グラフのリンクが切れてしまうことがあります。 元の Book が見つかる場合は、データも一緒にコピーしてグラフのリンクを再設定すれば良いのですが、 元の Book が無い場合は、非常に困ります。 以下は、リンク切れのグラフから元の値を取り出し、そのデータをグラフデータとして再設定する方法です。 |
|
|---|---|---|---|
≪例≫![]() ←左のような、グラフのみの Book があります。 このグラフは別の Book から貼り付けたため、 グラフの元となるデータは存在しません。 Book を開くたびに、 「このブックには、他のデータソースへの リンクが設定されています」 と警告が出ます。 | |||
標準モジュールに、以下のコードを貼り付けてください。
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
|
|
≪使い方≫ ワークシート上の グラフを1つ選択してから、このマクロを実行します。 ※ 「メニュー」−「ツール」−「マクロ」−「マクロ」−「 CreatGraphData」 を選択して 「実行」 を押します。![]() グラフのあるシートの左側に、新規シートが追加されます。 A列には、X軸の値が書き出されます。 B列から右横は、系列毎の値です。 グラフのリンクも、新規シートに書き出されたデータに、再設定されています。
|
≪注意≫
|
Copyright(C) pPoy 2010