• 締切済み

エクセルVBA グラフ範囲をフォームで指定したい

はじめまして。 エクセルのVBAでグラフ作成のマクロを作成したく、 グラフ範囲をフォームで条件分岐したいのですが・・・ 具体的には、画像のような表があった場合、 2,002年~2,010年まで期間で 東京と埼玉と山梨のグラフを項目Bのデータで作成するといったことを、 フォームで各項目を指定して、グラフ作成ボタンを押すとグラフができる仕様にしたいのですが、 フォームを作成したものの、フォームデータをグラフ範囲に反映させる方法がわかりません。 宜しくお願いします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

フォームからグラフの作成まですべてをマクロで対応するよりも関数を使ってグラフ作成用の表を作成し、その表を使ってグラフ作成の操作をすることで十分のように思いますね。 例えばお示しの表がシート1に有るとしてA1セルに県名の文字が、B1セルには項目の文字が、C1セルから右横の列には年が入力されているとします。他のデータはお示しの表のとおりとします。 そこで東京、埼玉、山梨などの県名やA,B,Cなどの項目の設定、選択する期間の設定などはシート2で行い、それによって抽出されるデータでグラフを作成するための表もシート2に作成することにします。 シート2では A1セルに県名の文字を入力し、B1,C1,D1などのセルには抽出したい県名を東京、埼玉、、山梨などと入力します。 A2セルには項目と入力し、B2セルにはBなどと入力します。 A3セルには期間始と入力し、B3セルには2000などと入力します。 A4セルには期間終と入力し、B4セルには2010などと入力します。 そこでグラフ作成用の表ですが6行目から下方のセルを使って表示させることにします。 A6セルは空白のままでA7セルには次の式を入力して下方にドラッグコピーします。 =IF(ROW(A1)>COUNTA(B$1:J$1),"",INDEX(B$1:J$1,ROW(A1))) B6セルには次の式を入力して右横方向にドラッグコピーします。 =IF($B3+COLUMN(A1)-1>$B4,"",$B3+COLUMN(A1)-1) B7セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR($A7="",B$6=""),"",INDEX(Sheet1!$C:$X,MATCH($A7,Sheet1!$A:$A,0)+IF($B$2="A",0,IF($B$2="B",1,IF($B$2="C",2,0))),MATCH(B$6,Sheet1!$1:$1,0))) これでグラフ作成用の表が完成しますので表示の範囲選択してから「挿入」タブのグラフからお望みのグラフの形を選択すればよいでしょう。

tenhiyu
質問者

お礼

回答ありがとうございます。 お礼が遅くなり申し訳ありませんでした。 1つのフォームで処理することしか考えていなかったのですが、 ご意見を参考に、 段階を追うフォームを作成することで解決しました。 最終的には、フィルタオプションでグラフ作成用のリストを作成するための フォームを段階的に作成しました。 本当にありがとうございました。