• ベストアンサー

エクセルのグラフで推移を知る。。。。

エクセルのグラフについて質問です。 任意のセル値の過去何ヶ月間(あるいは何日間)の値の推移を折れ線グラフで表示したいと思っています。(1月は100、2月は50、3月は150・・・というふうに) 違う別のセルに新しい値をどんどん入力していけば比較的簡単にできると思いますが、同じセルに値を上書きしていっても上書きされた値がグラフに反映されていくようにしたいです。 具体的にどのようにすればできるかご存知の方いらっしゃいますか???

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

  • ベストアンサー
noname#95859
noname#95859
回答No.3

下記でもって、置き換えてください。 ポイント: (1)myDate = Int(Now) ---これにより、時間を切り捨て、日にちだけにする。 (2).Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy mm/dd" ---これにより グラフのX軸フォーマットを決める (3) Do While rowpos <= position - 1 --- loop これにより、入力された日にちがすでに存在する時には、上書きする。 新しい日であれば、新データとしてHistoryに追記する。 スクリプトの中に、変更、追加した箇所をコメントしてあります。 ----------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim myData As String Dim myDate As Date Dim position As Long Dim FlagDuplicated As Integer Dim rowpos As Integer Application.EnableEvents = False If Application.MoveAfterReturn = True And Target.Address = "$A$2" Then Cells(2, 1).Select End If If Target.Address = "$A$2" Then myData = Target.Value myDate = Int(Now) 'changed With Sheets("History") position = .Cells(65536, 1).End(xlUp).Offset(1, 0).Row If position = 2 Then .Cells(1, 1).Value = "Date": .Cells(1, 2).Value = "Data" If IsNumeric(Target.Value) Then FlagDuplicated = 0 'added rowpos = 2 'added Do While rowpos <= position - 1 'added If .Cells(rowpos, 1).Value = myDate Then 'added .Cells(rowpos, 1).Value = myDate 'added .Cells(rowpos, 2).Value = myData 'added FlagDuplicated = 1 'added Exit Do 'added End If 'added rowpos = rowpos + 1 'added Loop 'added If FlagDuplicated = 0 Then 'added .Cells(position, 1).Value = myDate .Cells(position, 2).Value = myData End If 'added Else .Cells(position - 1, 1).ClearContents .Cells(position - 1, 2).ClearContents End If End With Call MakeGraph End If Application.EnableEvents = True End Sub ----------------------------------- Sub MakeGraph() Dim WS As Worksheet Dim GR1 As ChartObject Dim myGraph_found As Boolean Dim E_rowpos As Integer Dim hani As String Dim S_Date As Date Dim E_Date As Date E_rowpos = Worksheets("History").Cells(65336, 1).End(xlUp).Row hani = "A1:B" & E_rowpos If E_rowpos > 2 Then S_Date = Worksheets("History").Cells(2, 1).Value E_Date = Worksheets("History").Cells(E_rowpos, 1).Value hani = "A1:B" & E_rowpos myGraph_found = False Set WS = Worksheets("DataIn") For Each GR1 In WS.ChartObjects If GR1.Name = "myGraph" Then myGraph_found = True End If Next If myGraph_found = False Then Set GR1 = WS.ChartObjects.Add(10, 50, 300, 200) GR1.Name = "myGraph" Else Set GR1 = WS.ChartObjects("myGraph") End If With GR1.Chart .SetSourceData Source:=Sheets("History").Range(hani), PlotBy:=xlColumns .ChartType = xlXYScatterLines .Axes(xlValue).MinimumScale = 0 .Axes(xlValue).MaximumScaleIsAuto = True .Axes(xlValue).MinorUnitIsAuto = True .Axes(xlValue).MajorUnitIsAuto = True .Axes(xlCategory).MinorUnitIsAuto = True .Axes(xlCategory).MajorUnitIsAuto = True .Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy mm/dd" 'added .HasTitle = True .ChartTitle.Characters.Text = "Trial" .HasLegend = False End With End If End Sub -----------------------------------------------

その他の回答 (2)

noname#95859
noname#95859
回答No.2

入力の履歴を別シートにイベントプロシージャ(Worksheet_Change)を使って書き込みます。 その上で、標準モジュールのグラフ作成ルーチンを呼び出します。 (1)準備:シート名「DataIn」と「History」をもつシートを用意してください。 そして、シート「DataIn」のセルA1に”Data"と入れてください。 (2)標準モジュールに下記を転記してください。 ------------------------------------- Sub MakeGraph() Dim WS As Worksheet Dim GR1 As ChartObject Dim myObject As Object Dim myGraph_found As Boolean Dim E_rowpos As Integer Dim hani As String Dim S_Date As Date Dim E_Date As Date E_rowpos = Worksheets("History").Cells(65336, 1).End(xlUp).Row hani = "A1:B" & E_rowpos If E_rowpos > 2 Then S_Date = Worksheets("History").Cells(2, 1).Value E_Date = Worksheets("History").Cells(E_rowpos, 1).Value hani = "A1:B" & E_rowpos myGraph_found = False Set WS = Worksheets("DataIn") For Each GR1 In WS.ChartObjects If GR1.Name = "myGraph" Then myGraph_found = True End If Next If myGraph_found = False Then Set GR1 = WS.ChartObjects.Add(10, 50, 300, 200) GR1.Name = "myGraph" Else Set GR1 = WS.ChartObjects("myGraph") End If With GR1.Chart .SetSourceData Source:=Sheets("History").Range(hani), PlotBy:=xlColumns .ChartType = xlXYScatterLines .Axes(xlValue).MinimumScale = 0 .Axes(xlValue).MaximumScaleIsAuto = True .Axes(xlValue).MinorUnitIsAuto = True .Axes(xlValue).MajorUnitIsAuto = True .Axes(xlCategory).MinorUnitIsAuto = True .Axes(xlCategory).MajorUnitIsAuto = True .HasTitle = True .ChartTitle.Characters.Text = "Trial" .HasLegend = False End With End If End Sub (3)VBAprojectにて、Sheet1(DataIn)をダブルクリックして出てくるVBAeditor画面に下記のスクリプトを転記してください。 ------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim myData As String Dim myDate As Date Dim position As Long Application.EnableEvents = False If Application.MoveAfterReturn = True And Target.Address = "$A$2" Then Cells(2, 1).Select End If If Target.Address = "$A$2" Then myData = Target.Value myDate = Now With Sheets("History") position = .Cells(65536, 1).End(xlUp).Offset(1, 0).Row If position = 2 Then .Cells(1, 1).Value = "Date": .Cells(1, 2).Value = "Data" If IsNumeric(Target.Value) Then .Cells(position, 1).Value = myDate .Cells(position, 2).Value = myData Else .Cells(position - 1, 1).ClearContents .Cells(position - 1, 2).ClearContents End If End With Call MakeGraph End If Application.EnableEvents = True End Sub ----------------------------------------- (4)使い方 シート「DataIn」のセルA2にデータを入れて、「Enter」を押してください。 2つ目のデータをA2にいれて、「Enter」を押してください。 すると、グラフが現れます。3つ目のデータを入れると、グラフが変化します。 もし、その値が違うということであれば、数値以外のキーをA2に入力、「Enter」を押してください。 (5)その他 デバッグはそれなりにしていますので、まずは問題なく動くと思います。 しかし、実際の仕事に使えるかと言うと、まだ、問題があります。 例えば、データが時間単位である場合、日単位である場合、はたまた月単位である場合、 X軸の表記は、それなりにコントロールされるべきです。さもないと、見づらいです。 自動でコントロールすることは、難しくないのですが、今回には、入っていません。

naru1977
質問者

補足

Rich53さん、ありがとうございました。(^^♪ 大変分かりやすい回答で、早速試しにやってみたところできました。 ひとつ質問があります。 入力した日時でグラフが更新されますが、同じ日にちであれば時間は関係なく、何回打ち直してもその日のグラフの値は変わらないようにしたいのですが、このモジュールのどこかを変えるとできますか?

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

まず単純なことですが、上書きの場合過去のデータがなくなるのでグラフは作れません。 おっしゃるようにする方法は、マクロを使って入力の履歴を表にして その表を元にしたグラフを表示する方法だけです。 ところで、入力した値の見出しはどうするのでしょうか?入力した日付でいいのでしょうか? その辺を補足されれば、よい回答がつくと思います。

naru1977
質問者

お礼

早速ありがとうございました。 マクロで別シートに入力の履歴を作成してそのグラフを作成するのですね。 入力の履歴をその都度グラフに反映させる(入力した日付で見出し作成)ようなマクロを作成したいです。 マクロは全くの初心者なので、具体的な作成方法を教えていただければうれしいです。

関連するQ&A

  • エクセルの推移グラフについて

    教えて下さい。 エクセルで1つのセルの数値の推移グラフを作る事は可能ですか? 例えば、A1のセルの数値が1から2に変更になれば、 自動的に1から2に変化したという推移グラフを作ることは出来ますか? 1つのセルの値の変化を折れ線グラフにしたいと思っています。 宜しくお願いします。

  • エクセル グラフにセルの値を参照した目盛を入れたい

    エクセル(Microsoft Office Excel 2007)の(折れ線)グラフで 縦軸・横軸それぞれに、 任意のセルを参照した線(目盛)をいれたいのですが、できるでしょうか。 イメージを添付しましたが、 任意のセルの値<7>を反映した横軸目盛と 任意のセルの値<1月4日>を反映した縦軸目盛をいれたいです。 この任意のセルの値が毎回変わるので、参照でないとダメなのですがいかがでしょうか。 お分かりになる方がいましたら、教えてください。

  • エクセルで、違う言葉が入力されてしまう…

    エクセルで折れ線グラフを作成中、あるセルの行だけ、 入力した内容が異なって表示されます。 具体的には、例えば、9月5日のデータは50、 9月6日のデータは53…というふうに 推移の折れ線グラフを作っているのですが、 ある行だけ、「70」とセルに入力すると「1900/2/25」…(おそらく日付?)などと いうように、全く異なる数字が表示されます。 (折れ線グラフには正しい数値で入力されています) この状態になるのは、ある特定の行のセルだけのようです。 これはどういう症状でしょうか。 どうすれば正しい表示になるでしょうか。

  • 折れ線グラフ

    Excelのグラフについて。 一旦0にリセットする折れ線グラフを作成できますでしょうか? 具体的には、 ある数値について 1月1日は0 1月末日は、任意の値(350など) 2月1日は0 2月末日は、任意の値(760など) 1年分、以下略 これらの値を棒グラフで示したいです。 その際、1月末日から2月1日までの折れ線を非表示にしたいです。 可能でしょうか? よろしくお願いします。 Excel2010以上

  • エクセル2003グラフ

    お世話になっております。 エクセル2003で折れ線グラフを作成したら、 A1は""なんですが、 他のセル、=if(A1="","",3)などのセルを値とする部分が 0 としてグラフになってしまうんですが、直せませんか? 0でなく、折れ線不要なんですが、、、、 よろしくお願いします。

  • Excel グラフ

    Excelのグラフについて。 一旦0にリセットするグラフ(棒線)を作成できますでしょうか? 具体的には、 ある数値について 1月1日は0 1月末日は、任意の値(350など) 2月1日は0 2月末日は、任意の値(760など) 1年分、以下略 これらの値を棒グラフで示したいです。 可能でしょうか? よろしくお願いします。 Excel2010以上

  • エクセルのグラフの作り方

    エクセル2000を使用しています。 販売総数の推移を折れ線グラフで表したいと思っています。 セルには日別の販売個数が入力されていますが、それらを全選択して グラフウィザードでグラフ作成しても、日別の販売個数の変化しか 表現できませんでした。 どういう手順が必要でしょうか? ちなみにエクセル初心者です。

  • エクセルのグラフについて

    バージョンはexcelの2000です。グラフについて質問です。折れ線グラフを使用していますが、値を入れてないところも、折れ線をつなげたいのですが、値が入ってないと、折れ線がちぎれてしまいます。どなたかご存知ではないですか?

  • エクセルのグラフで質問です

    Office XPのエクセルで折れ線グラフを作ってるのですが セルの値が0の時はグラフの表示(プロットて言うんですかね)を しないようにしたいのですが、セル自体に関数を使ってゼロの値が 入った時はグラフにゼロが表示してしまうのですが これは、どうしようも無いのでしょうか? 何か方法があればよろしくお願いします。

  • 多項目で数値の差が大きいデータの推移をグラフ化

    多項目のデータの推移をExcel2007でグラフ化したいのですが、どのようなグラフにすれば見やすいか悩んでいます。 月ごとの推移なら折れ線グラフか?と、作っても見ましたが、それぞれの数値の差が大きく、項目によっては変化がわかりにくいうえ、項目数が多いのでグラフが見づらくなります。 項目は2階層ほどに分類されています。この階層ごとに数値を集計してグラフを作るのもありかと思いますが、基本は項目ごとの推移がわかるようなグラフが必要です。 折れ線グラフではなくてもいいのですが、推移を表すのに他にどんなグラフがよいかわかりません。 データの例は添付ファイルのような感じです。 アバウトな質問ですが、こんな方法でこんなグラフはどうか・・・など、アドバイスがいただけると助かります。

専門家に質問してみよう