【VBAリファレンス|実務向け】実務で差がつく!UserFormへグラフを動的に表示するテクニック

スポンサーリンク

なぜ「シート上のグラフ」ではダメなのか

Excelでダッシュボードを作成する際、シート上にグラフを並べるのが一般的ですが、業務ツールとして配布する場合、「操作を制限したい」「誤操作を防ぎたい」というニーズが必ず出てきます。そんな時、UserForm内にグラフを表示させる手法は、プロフェッショナルなツールとして非常に有効です。今回は、単にグラフを貼り付けるだけでなく、実務で耐えうる「動的な更新」に焦点を当てます。

Chartオブジェクトを画像として書き出す

VBAでUserFormにグラフを表示する際、最も安定している手法は「グラフを一度画像ファイルとしてエクスポートし、それをImageコントロールに読み込む」という手順です。

具体的なコードの流れは以下の通りです。

1. シート上のグラフをChartオブジェクトとして特定する。
2. Exportメソッドを使い、一時フォルダ(Environ(“TEMP”)など)にPNG形式で保存する。
3. UserForm上のImageコントロールのPictureプロパティに、LoadPicture関数で読み込む。

この際、Export時のファイル名に日時やランダムなIDを付与することで、複数人が同時に同じファイルを開いても競合しない仕組みを作るのが、ベテランの定石です。

実務で直面する「解像度の壁」を突破する

ここからが現場の知恵です。デフォルトのExportメソッドで書き出すと、グラフがぼやけて表示されることがあります。これを防ぐには、エクスポート前にグラフのサイズを意図的に拡大(例えば2倍)してから書き出し、読み込み後にImageコントロールのSizeModeを「1 – fmPictureSizeModeStretch」に設定します。これにより、高精細なグラフをフォーム内に綺麗に収めることが可能になります。

更新ボタンとイベントの連動

「抽出条件を変更したのにグラフが変わらない」というユーザーからの問い合わせは、ツール開発者にとっての「あるある」です。これを防ぐには、抽出処理の終了直後に必ず以下の処理を走らせるように設計してください。

Call グラフ更新用サブプロシージャ名

このサブプロシージャの中に「画像のエクスポート」と「Imageコントロールの再読み込み」を記述しておくことで、フォームを閉じずにグラフだけを瞬時に切り替えることができ、ユーザー体験は劇的に向上します。

最後に:メモリ管理を忘れずに

画像として書き出す手法は便利ですが、一時フォルダにファイルが溜まり続けるのは好ましくありません。UserFormを閉じる際(QueryCloseイベント)に、Killステートメントを使って作成した画像ファイルを削除する処理を必ず組み込んでください。

こうした細やかな後処理こそが、大規模なツールでも動作が重くならない、長く愛されるツールの条件です。ぜひ、次回の開発で試してみてください。

タイトルとURLをコピーしました