エクセルでご質問です。


タスクの期日管理のために、セル上に日付、時には時間も記載をして管理をしたいと思っております。


日付のみ表示したい時は

「2010/4/16 0:00 ⇒ 2010/4/16」と表示し、

時間も表示したい時は、

「2010/4/16 10:00」と表示させるセルの書式設定や関数はないでしょうか?

お手数おかけいたしますが、ご存じの方がおりましたら、
ご教授いただけましたら幸いでございます。

宜しくお願いいたします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/15 00:24:09
  • 終了:2010/04/18 20:33:58

回答(5件)

id:Bombastus No.1

ホーエンハイム回答回数409ベストアンサー獲得回数522010/04/15 00:53:55

ポイント20pt

年月日の書式設定は "yyyy/mm/dd"

時分秒を含む書式設定は "yyyy/mm/dd hh:mm:ss"

です。

id:staygold1367

この設定ですと、時間を必ず表示するか、必ず表示しないかの設定になってしまうため、ニュアンスが違うんですよぉ。。。

同じ設定をしていて、日付のみ入力した時には日付だけ表示されて、時間も入力した時には時間も表示されて、

最終的にソートした際に、しっかり時間順にならんで欲しいのです。

2010/04/15 02:08:18
id:GreenStar No.2

GreenStar回答回数192ベストアンサー獲得回数462010/04/15 03:26:22

ポイント20pt

(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」でも対応します。

id:Gay_Yahng No.3

Gay_Yahng回答回数724ベストアンサー獲得回数262010/04/15 09:59:39

ポイント20pt

ちょっとやりたいことがわからないのですが、ソートした時に

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

 

となります。

id:SALINGER No.4

SALINGER回答回数3454ベストアンサー獲得回数9692010/04/15 10:07:48

ポイント50pt

まず、正しくソートできることを考えるとシリアル値でなくてはならなくて、

シリアル値を表示形式を変えて表示するしかない。

ところがワークシート関数では表示形式や書式を変更することはできない。

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
id:GreenStar No.5

GreenStar回答回数192ベストアンサー獲得回数462010/04/15 13:41:26

ポイント20pt

なぜか消えていますので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
  • id:kaiton
    id:staygold1367 さん
    気付いた時は回答数上限で回答できなかったのですが、これであっているのかどうか??

    まずは、A列にそのデータがあるとして
    A列全体の表示形式を 日付の中から「2010/4/16 10:00」の形式を設定
    A1の条件付き書式で、次の値に等しいで =INT(A1) 書式の表示形式に「2010/4/16」の形式を選択
    A1をコピーして、A2以下に 形式を選択して貼り付け で「書式」チェックでOK

    これで、希望の要件なのでしょうか?

  • id:kaiton
    上のコメントの補足 Excel2007で確認しました。
  • id:SALINGER
    なるほど2007では条件付き書式が表示形式まで拡張されてたんですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません