• ベストアンサー

グラフでX軸の時間をきれいに並べる方法

時間別の販売数のような表をグラフにしています。 販売のなかった時間はデータが上がってこないので、表に現れません。 その為、画像(サンプル)の上段のグラフになります。 10時や15時の時間帯が飛んでしまっています。 しかし、実際は下段のグラフが現実的です。 自動的に販売0の時間も全て表示するグラフは出来ないでしょうか。 または元になっている表の操作でもいいです。 毎回、手入力で全時間帯の表に書き直すしかないでしょうか。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

エクセルのウラフは、「まずデータありき」で描かれます。データをエクセルのグラフの設定機能機能で、都合のよいように(ルール性は有るものの)化公加工する的なことは出来ません(間引くとか、増やすとか、演算するとか、1/10に加工するとか)。この点を勘違いと言うか、限界を認識しない質問が時々有る。 VBAででも、時間単位にデータがあるかどうか判別して、無い場合は、0のデータ行を増やすしかないでしょう。 ーー 実データでやってないので、「あるいは役に立つかも」と言う感じですが、 関数でデータが増やせるか、やってみると 例データ A,B列 飛び飛びデータ 2009/8/1 9:00 12 2009/8/1 12:00 23 2009/8/2 7:00 6 ・・ D列に  連続データで(これが出来ない種類の時間区分けなら、以下無効)下記は1時間単位の例です。 D2以下に 2009/8/1 9:00 2009/8/1 10:00 2009/8/1 11:00 2009/8/1 12:00 2009/8/1 13:00 ・・ E2に=INDEX($A$1:$B$100,MATCH(D2,$A$1:$A$100,0),2) と入れて下方向に式を複写。 E列は 12 #N/A #N/A 23 #N/A となる。自身の列へ形式を選択して貼り付けー値で式を消す。 #N/Aが値(文字列)になったところで、置換で#N/Aー>空白か0に 置換する。バージョンによっては、関数の#N/Aのままで置換できれば ラッキ-。 関数で#N?Aなら0を返す式も作れるが、極く長い式になるので置換を 考えた。

miine
質問者

お礼

おっしゃる様に、設定機能で完全な時系列のグラフに変えられるかと思ったんですが、無理なんですね。 この関数だと分単位の場合でも出来ます。 ISERRORを組み合わせて空白時間は直接0が出るようにしました。 ありがとうございます。

その他の回答 (5)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

>回答番号:No.1 この回答への補足 ≪元の表に欠けている時刻を入力する例≫ 下記マクロを実行すると、時間データ列の最下行以下に、7:00~22:59までの時刻が入力されます。 (シート名、セルの列番地は実際に合わせて書き直す必要があります。) Sub test1() Dim myRng As Range Dim n As Long Dim i As Long Dim j As Long Set myRng = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp) For i = 7 To 22 For j = 0 To 59 n = n + 1 myRng.Offset(n).Value = i & ":" & Format(j, "00") Next j Next i End Sub 時刻データが入力されたなら、下記ページを参考に、重複する時刻データ行を削除する。 重複データを一気に削除する http://trendy.nikkeibp.co.jp/article/tec/excel/20040308/107541/ 余談ですが 実は、~~なんです。 というようなやり方は非効率的です。 最初から実際の状況を提示するようにしてください。 マクロを工夫すれば、欠けている時刻データのみを入力することもできます。

miine
質問者

お礼

ソートという方法も有るんですね。 マクロありがとうございました。

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.4

棒グラフでなければいけない制約がなければ 散布図グラフにするだけで済みますね。

  • umazanpai
  • ベストアンサー率38% (53/137)
回答No.3

表 項目軸 両方とも表示形式で対応します。 X軸は時系列にします。

miine
質問者

補足

表示形式というのは軸の書式設定でしょうか? これで「時刻」にしても結果は変わらないのですが。 ウィザードで軸を時系列にし軸の書式で「時刻」を選ぶと0:00の一本の棒だけのグラフになってしまします。 バージョンはExcel2003です。

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

横軸が数値のないところでも等間隔で並んでくれるのは日、月、年だけの場合です。時間の場合には自動的には行ってくれません。 そこで苦肉の策として次のようにしてはどうでしょう。 時間が7:00から23:00まで並んでいますがこれがA列にあるとしてB列を挿入します。販売数はB列からC列に変わります。 そこでB2セルには=A2*24と入力し、下方にオートフィルドラッグします。その後にセルの表示形式で1月7日とかの表示形式にします。 この状態でB列とC列の表を範囲としてグラフを作成します。 7:00は1月7日、23:00は1月23日になりますがその間は1日間隔で表示されるようになります。 その後にグラフの横軸付近で右クリックして「軸の書式設定」を選択します。「表示形式」で「文字列」を選択します。 その結果、1月7日は7、1月8日は8、最後1月23日は23と表示が変わります。これで、お望みの状態の横軸表示となりますね。

miine
質問者

補足

裏技なんでしょうね。 日にちだと確かに個数の抜けたところもグラフに現れました。 ただ、申し訳ないのですが、実際のは分なんです。 x60x24を掛けても、たぶん31分を過ぎると次の月に表示が変わってしまうのでは。 しかし、一度シリアル値にしてそれを割って時分表示をだすって事が出来るかも知れません。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

データのない時間も、元データ表に加えるべきではないでしょうか。

miine
質問者

補足

回答ありがとうございます。 判りやすいよう時間別で説明しましたが、実際に毎日回されてくる表は分刻みになります。 表に載っている行数(個数が発生した分)が300行くらいです。(日によって違います) 7時から23時まで1分刻みに1行だと960行くらいの表を作りそれに書写す事になります。 これはかなり手間が掛かります。 Excelは時間を認識できるので、元の表から自動的に全時間を軸にしたグラフが出来ないかと思いまして。

関連するQ&A

専門家に質問してみよう