タスクの期日管理のために、セル上に日付、時には時間も記載をして管理をしたいと思っております。
日付のみ表示したい時は
「2010/4/16 0:00 ⇒ 2010/4/16」と表示し、
時間も表示したい時は、
「2010/4/16 10:00」と表示させるセルの書式設定や関数はないでしょうか?
お手数おかけいたしますが、ご存じの方がおりましたら、
ご教授いただけましたら幸いでございます。
宜しくお願いいたします。
(1)関数の例
あまりスマートではありませんが関数で作りました。
=TEXT(A1,"yyyy/mm/dd")&IF(TEXT(A1,"hh:mm:ss")="00:00:00","",TEXT(A1," hh:mm"))
結果は文字列です。セルの書式を「標準」にしておけば左詰になるので見やすいでしょう。
集計等を行う場合は元のセルを使うか、この式を書いたセルを使うか適宜チョイスしてください。
(2)VBAの例
VBAで書式を書き換える場合は下記のような具合です。
VBAは http://q.hatena.ne.jp/1261446484 を参考にしました。
いずれも時刻部分を参照して処理していますので、日付のみ表示したい時の入力は「2010/4/16 0:00」でも「2010/4/16」でも対応します。
ちょっとやりたいことがわからないのですが、ソートした時に
2010/4/16
2010/4/16 10:00
2010/4/16 10:40
のように時間まで入れていない場合はその日の一番前になればいいのでしょうか?
次善策ですがセルを1つ増やすのはどうですか?
A1に2010/4/16 10:00
B1に=IF(MOD(A1,1)=0,"",A1)
と入れておいて、A1の書式を年月日表示、B1の書式を時間表示に設定すると
A1 B1
2010/4/16 10:00
となります。
これだと時刻まで入れていない場合は
A1 B1
2010/4/16
となります。
まず、正しくソートできることを考えるとシリアル値でなくてはならなくて、
シリアル値を表示形式を変えて表示するしかない。
ところがワークシート関数では表示形式や書式を変更することはできない。
VBAで一括して表示形式を変更するという方法もあるが、「入力して・・・」VBAを実行してと2段階必要になる。
そこで、トリッキーな方法ではあるがワークシートのイベントを利用して表示形式を変更する方法でなんとか可能。
次のコードをシートタブを右クリックして「コードの表示」で開くシートモジュールにコピペしてください。
コードはセルに入力された値を判別して表示形式を変更するマクロです。
最初の方の「"A:A"」は処理を受け付ける範囲を限定する処理ですので、実際に合わせてください。
Private Sub Worksheet_Change(ByVal Target As Range) '日付を入力されるセルの範囲を限定しておく。ここではA列を指定。 If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub If Not IsDate(Target.Value) Then Exit Sub If Format(Target.Value, "long time") = "0:00:00" Then Target.NumberFormatLocal = "yyyy/m/d" Else Target.NumberFormatLocal = "yyyy/m/d h:mm:ss" End If End Sub
なぜか消えていますのでVBAの例を再掲します
Option Explicit Const aRangeFormula = "A:A": ' ここにセル範囲を書く。例はA列 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range(aRangeFormula)) Is Nothing Then Exit Sub If Application.WorksheetFunction.Text(Target, "hh:mm:ss") = "00:00:00" Then Target.NumberFormatLocal = "yyyy/m/d" Else Target.NumberFormatLocal = "yyyy/m/d h:mm" End If End Sub
この設定ですと、時間を必ず表示するか、必ず表示しないかの設定になってしまうため、ニュアンスが違うんですよぉ。。。
同じ設定をしていて、日付のみ入力した時には日付だけ表示されて、時間も入力した時には時間も表示されて、
最終的にソートした際に、しっかり時間順にならんで欲しいのです。