人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルでご質問です。

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


日付のみ表示したい時は

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

時間も表示したい時は、

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

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

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

●質問者: staygold1367
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:00 エクセル セル タスク 教授
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● ホーエンハイム
●20ポイント

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

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

です。

◎質問者からの返答

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

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

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


2 ● GreenStar
●20ポイント

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


3 ● Gay_Yahng
●20ポイント

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

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

となります。


4 ● SALINGER
●50ポイント

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

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

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

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

5 ● GreenStar
●20ポイント

なぜか消えていますので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
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ