記事「Excel:VBAマクロを使わないで、グラフに使用するデータを手軽に切り替える方法」では、VBAマクロを使わないで、グラフに使用するデータを手軽に切り替える方法を紹介しました。
今回はそこに一工夫を加え、任意に選んだ2つのデータをグラフに表示できるようにしてみましょう。
画面
グラフ用シート
「管理」シート
データシート1
「1日」シート
データシート2
「2日」シート
データシート3
「3日」シート
表示するグラフの切り替え操作
表示するグラフの切り替えを行うには、グラフが表示されている「管理」シートのグラフ化するシートを選択するためのセルを選択します。(系列1、もしくは系列2)
初期状態
↓
すると、表示できるグラフのシート名がリストとして表示されるので、別のシート(3)を選択します。
リストから 3 を選択。
↓
すぐに元々表示されていた「2日」シートのデータから、「3日」シートのデータに切り替わります。
グラフが「3日」シートのデータに切り替わる
このように非常に手軽に表示するデータの切り替えを行うことができます。
更に、以下のように系列1、系列2とも変更して、自由にデータを比較することができます。
系列1、系列2とも変更して、自由にデータを比較することができる
表示するグラフの切り替えの仕組み
「管理」シートを次のエリアに分けて説明します。
「管理」シート エリア分け
(1) グラフの表示用データ 系列1 エリア
ここに記載されているデータを基に系列1のグラフを作成しています。
このデータは次の数式により、セルG2で選択されたシートのデータを表示するようになっています。
例)セルA2の場合:(他のセルはオートセル機能によって自動でセルの参照が更新されています。)
セルA2の数式:
=INDIRECT(ADDRESS(ROW(A2),COLUMN(A2),1,1,$G$2&$H$2),TRUE)
ADDRESS 関数で、現在の行・列にある別のシート($G$2&$H$2 でシート名を作成)の参照文字列を作り出しています。
その参照文字列をINDIRECT関数に渡し、その参照文字列が指し示すセルの内容を取得しています。
例)セルB1の場合:
グラフの凡例にどのシートのデータを表示しているのか示すために、凡例にシート名(G2&H2)を加えています。
セルB1の数式:
=INDIRECT(ADDRESS(ROW(B1),COLUMN(B1),1,1,$G$2&$H$2),TRUE)&"-"&G2&H2
(2) グラフの表示用データ 系列2 エリア
ここに記載されているデータを基に系列2のグラフを作成しています。
このデータは次の数式により、セルG3で選択されたシートのデータを表示するようになっています。
例)セルC2の場合:(他のセルはオートセル機能によって自動でセルの参照が更新されています。)
セルC2の数式:
=INDIRECT(ADDRESS(ROW(A2),COLUMN(A2),1,1,$G$3&$H$3),TRUE)
ADDRESS 関数で、現在の行・列にある別のシート($G$3&$H$3 でシート名を作成)の参照文字列を作り出しています。
その参照文字列をINDIRECT関数に渡し、その参照文字列が指し示すセルの内容を取得しています。
例)セルD1の場合:
グラフの凡例にどのシートのデータを表示しているのか示すために、凡例にシート名(G3&H3)を加えています。
セルD1の数式:
=INDIRECT(ADDRESS(ROW(B1),COLUMN(B1),1,1,$G$3&$H$3),TRUE)&"-"&G3&H3
(3) グラフ化するシート選択 エリア
セルG2, G3にはデータの入力規則を設定し、その下にあるデータ範囲のセルの内容をリストとして表示し、そこから値を選択できるようになっています。
データの入力規則を設定し、リストから値を選べるようにする
以上の設定で、ユーザが選んだシートのグラフを動的に表示できるようになっています。
VBAマクロなどを使用せず、Excel の標準的な機能で動的なグラフの変更を実現できるため、非常に手軽です。
サンプルファイルのダウンロード
excel_sample_graph_change_list_2item_ver1_0_0_public.xlsx (18.7 KB (19,207 バイト))
まとめ
リストから2系列分のデータを選択して、グラフのデータを動的に切り替える方法をご紹介しました。
今回ご紹介した Excel のテクニックを用いれば、データをグラフで比較する場合など、比較したいデータを任意に選んで比較できるので、作業の効率化につながると思います。
コメントを投稿
コメント投稿機能について