- ベストアンサー
グラフでX軸の時間をきれいに並べる方法
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
エクセルのウラフは、「まずデータありき」で描かれます。データをエクセルのグラフの設定機能機能で、都合のよいように(ルール性は有るものの)化公加工する的なことは出来ません(間引くとか、増やすとか、演算するとか、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を返す式も作れるが、極く長い式になるので置換を 考えた。
その他の回答 (5)
- xls88
- ベストアンサー率56% (669/1189)
>回答番号: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/ 余談ですが 実は、~~なんです。 というようなやり方は非効率的です。 最初から実際の状況を提示するようにしてください。 マクロを工夫すれば、欠けている時刻データのみを入力することもできます。
お礼
ソートという方法も有るんですね。 マクロありがとうございました。
- DreamyCat
- ベストアンサー率56% (295/524)
棒グラフでなければいけない制約がなければ 散布図グラフにするだけで済みますね。
- umazanpai
- ベストアンサー率38% (53/137)
- KURUMITO
- ベストアンサー率42% (1835/4283)
横軸が数値のないところでも等間隔で並んでくれるのは日、月、年だけの場合です。時間の場合には自動的には行ってくれません。 そこで苦肉の策として次のようにしてはどうでしょう。 時間が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と表示が変わります。これで、お望みの状態の横軸表示となりますね。
補足
裏技なんでしょうね。 日にちだと確かに個数の抜けたところもグラフに現れました。 ただ、申し訳ないのですが、実際のは分なんです。 x60x24を掛けても、たぶん31分を過ぎると次の月に表示が変わってしまうのでは。 しかし、一度シリアル値にしてそれを割って時分表示をだすって事が出来るかも知れません。
- xls88
- ベストアンサー率56% (669/1189)
データのない時間も、元データ表に加えるべきではないでしょうか。
補足
回答ありがとうございます。 判りやすいよう時間別で説明しましたが、実際に毎日回されてくる表は分刻みになります。 表に載っている行数(個数が発生した分)が300行くらいです。(日によって違います) 7時から23時まで1分刻みに1行だと960行くらいの表を作りそれに書写す事になります。 これはかなり手間が掛かります。 Excelは時間を認識できるので、元の表から自動的に全時間を軸にしたグラフが出来ないかと思いまして。
お礼
おっしゃる様に、設定機能で完全な時系列のグラフに変えられるかと思ったんですが、無理なんですね。 この関数だと分単位の場合でも出来ます。 ISERRORを組み合わせて空白時間は直接0が出るようにしました。 ありがとうございます。