• ベストアンサー

エクセルのグラフ範囲を毎日かえてグラフをかく

Sheet1に 列に日にち(A~AEまで31日分) 行には計算したデータがあります。 例) ?月1日ならば A1をグラフ範囲としてグラフを書き、 ?月2日ならば A1からB1をグラフ範囲としてグラフをかく といった感じで毎日 その日までをグラフ範囲として描きたいのですが 毎日毎日自分でグラフ範囲を指定するのは面倒なので 自動的にグラフ範囲を指定したいのです。 わかりにくい文章ですみません どなたか教えて下さいお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22650
noname#22650
回答No.4

>セルに計算式が入っているからか、 >プロットしないでも0が表示してしまいます。 なるほど、なかなか難しいですね(^^; 1行目にデータ、2行目が空いているとします グラフの範囲をA2からAE2に #1と同様オープン時のイベントを記述 Private Sub Workbook_Open() Dim データ行 As Integer Dim グラフ行 As Integer Dim 日 As Integer データ行 = 1 グラフ行 = 2 '適当に空いてる行に変えてください 日 = Day(Now()) Range(Cells(グラフ行, 1), Cells(グラフ行, 31)).ClearContents 'グラフ用のデータを削除 Range(Cells(データ行, 1), Cells(データ行, 日)).Copy '必要なデータのみコピー Cells(グラフ行, 1).Select 'グラフ用データの貼り付け先を選択 Selection.PasteSpecial Paste:=xlValues '値の貼り付け End Sub こんな感じでどうでしょう? 空いてる行へ必要なデータのみコピーし、それを元にグラフを書くようにしています。 印刷する時などでグラフ用のデータ見えて見栄えが悪い場合は、グラフ用のデータが入っているセルのフォントの色を白にすればごまかせます(裏技)

tottototto
質問者

お礼

なんどもありがとうございました。 やっと実現できるようになりました。 裏技もなるほど納得です。 ありがとうございました。

その他の回答 (3)

noname#22650
noname#22650
回答No.3

>折れ線グラフのラインだけをその日まで描かせたいみたい これでしたらマクロなどは不要ですね。 グラフの範囲は31日分にしておく。 グラフを選択して[ツール]→[オプション]→[グラフ]→[空白セルのプロット]で[プロットしない]に。 これで不要なデータを消せばラインも消えると思いますが。

tottototto
質問者

お礼

ありがとうございます。 セルに計算式が入っているからか、 プロットしないでも0が表示してしまいます。 ほんとすみません。

noname#22650
noname#22650
回答No.2

グラフの名前を正しくしないと動きません。 これを調べるのは簡単ではないようですね、失礼しました。 ちょっとややこしい操作になりますので、バックアップを取ってから行ってください。 1.[ツール]→[マクロ]→[新しいマクロの記録] 2.マクロ名「Macro1」のままで[OK] 3.グラフをドラッグして少し移動させる 4.[ツール]→[マクロ]→[記録終了] 5.[ツール]→[マクロ]→[マクロ] 6.「Macro1」を[編集] すると  ActiveSheet.ChartObjects("グラフ ?").Activate のような部分があると思います、↑これがグラフ名です。 7.保存せずに終了(不要なマクロを記録したので) 8.再度開いてグラフ名を書き換えてください 追記 列を変更する場合は Cells(1, 1)とCells(1, d))    ↑     ↑ この1を適当な列番号に変えてください。

tottototto
質問者

お礼

ご丁寧にありがとうございます。 うまくいきました。 しかし、よくよく依頼人にきくと、私はとんでもない 勘違いをしていました。 グラフ範囲は30日又は31日でいいらしく 折れ線グラフのラインだけをその日まで描かせたいみたいです。すみません。 残り少しの追加でできるものなんでしょうか? なんどもなんどもすみません。

noname#22650
noname#22650
回答No.1

visual basic editorを開き「ThisWorkbook」を開き、 オープン時のイベントを記述。 Private Sub Workbook_Open() Dim d As Integer d = Day(Now()) ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(1, d)) End Sub こんな感じでいかがでしょう? (シート名、グラフ名などは適当に変えてください)

tottototto
質問者

お礼

返事が遅くなってすみません! ActiveSheet.ChartObjects("グラフ 1").Activate のところでChartクラスのChartObjectプロパティを取得 できませんというエラーがでてしまいます。 またアドバイスいただければありがたいです。 どうぞよろしくお願いします

関連するQ&A