皆さん、こんにちは。現場で使えるVBAテクニックを伝授する講師です。
日々の業務でExcelのグラフを作成する際、まずは「埋め込みグラフ」として作成するのが一般的ですよね。しかし、いざ上司への報告資料や社内共有用のファイルを作る段階になると、別のシートにグラフだけを独立させて表示させたいというニーズが出てくるものです。
今回は、手作業で移動させる手間を省き、ワンクリックで「埋め込みグラフをグラフシートへ変換する」実務的なコードを紹介します。
なぜ「グラフシート」にする必要があるのか
実務において、埋め込みグラフのままでは「印刷レイアウトの調整」や「プレゼン資料への転記」が非常に面倒です。グラフシート(グラフ専用のシート)にしておけば、印刷時に自動的にA4サイズに最適化されますし、他の担当者にファイルを渡す際もグラフの選択ミスを防ぐことができます。
実務で使えるVBAコード
以下のコードは、アクティブシート上にある「最初のグラフ」を新規グラフシートへ移動させるものです。
Sub MoveChartToNewSheet()
Dim ws As Worksheet
Dim chtObj As ChartObject
Set ws = ActiveSheet
‘シート上にグラフが存在するか確認
If ws.ChartObjects.Count = 0 Then
MsgBox “グラフが見つかりません。”
Exit Sub
End If
‘一番上のグラフを対象にする
Set chtObj = ws.ChartObjects(1)
‘グラフを新しいグラフシートへ移動
chtObj.Chart.Location Where:=xlLocationAsNewSheet, Name:=”報告用グラフ”
MsgBox “グラフを別シートへ移動しました。”
End Sub
このコードのポイント
1. 存在チェックを入れる
エラーハンドリングを怠らないのがベテランの流儀です。グラフがない状態で実行するとVBAは即座にエラーで止まってしまうため、If文で事前にチェックを入れることで、共有相手が使っても「壊れにくいツール」になります。
2. Locationメソッドの柔軟性
今回の肝は、Locationメソッドです。引数に xlLocationAsNewSheet を指定するだけで、本来複雑なシート移動処理を一行で完結させています。実務では、この後に「シート名を動的に変更する」処理を付け加えることで、より高度な自動化が可能です。
さらなる応用:複数グラフを一括移動させる
もしシート内にグラフが複数ある場合は、For Each文を使ってループ処理を組むのがおすすめです。「月次報告」などで毎回5〜6個のグラフを移動させている方は、ぜひこのコードをベースにループ処理を組み込んでみてください。
VBAは、単に「自動化する」だけでなく、「作業の型を統一する」ことでミスを減らす強力な武器になります。皆さんの業務環境に合わせて、ぜひカスタマイズしてみてくださいね。それでは、次回の講義でお会いしましょう!
