- ベストアンサー
現時刻を入力
教えてほしいのですが、A1に1~5までの数字を入力した際に A2のセルに現時刻が入力されるようにすることは可能なんですか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Worksheet_Change(ByVal Target As Range) 'A列以外が変更されたら何もしない If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub 'A列の値のが0より大きく6より小さかったらB列に現在時刻を代入 'それ以外のときは何もしない(B列の値はクリアしない) If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") End Sub もし、B列に既に時刻が入っていて、A列の値を1~5以外に変えても、↑のサンプルでは前の時刻が残ったままです。 B列に既に時刻が入っていて、A列の値を1~5以外に変えたらB列をクリアしたい場合は > If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") ↓のように変えてください。 If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") Else Target.Offset(0, 1).Value = "" End If
その他の回答 (7)
- marbin
- ベストアンサー率27% (636/2290)
>時間がAM,PMで表示されるのではなく24時間で表示される方法 Foramt関数 を使います。 表示セル.Value = Format(Time ,"h時m分s秒") というような感じになります。 セルの表示形式を変えておく、という手もあります。 表示セル.NumberFormatLocal = "h:mm:ss;@" 「表示セル」は↓によって変わってきます。 >A1だけでなくA列すべてにこれが適用されるのはどうすればいいですか? A1が書き換えられたときにA2のセルに時刻を入力するものですが、 A列全体 となると、時刻はどこに入力するようにしますか? ※いまから外出しますので、レスは18時以降になるかもしれません。
補足
B列です。忙しいのにすいません。
- Caryo_t
- ベストアンサー率45% (112/246)
caryo_tです。 確かに自動計算で変わってしまいますねぇ。 (;^^) 「自身あり」というのは撤回です。お恥ずかしい。
- marbin
- ベストアンサー率27% (636/2290)
なぜA1以外を書き換えたときも A2セルの値が変わったかと言いますと、 「自動計算」機能が働いたからです。 手動計算にしておくと今度はどのセルの値を 変えても再計算されませんので不具合が出ます。 シートごとに再計算のオン/オフは切り替えら れたと思いますが、セルごとに、は出来なかっ たと思います。 それで、マクロのシートのイベントで、マクロが 実行されるセル範囲を限定して、という方法が よく使われます。 今回はセルの値を変えたときに自動実行する マクロですが、 選択セルを移動したときに セルを右クリックしたとき セルをWクリックしたとき などにマクロを自動実行する機能(イベント) もあります。 http://www.k1simplify.com/vba/tipsleaf/leaf311.html VBA入門サイトです。 こちらにもシートのイベントの記述があります。 http://excelvba.pc-users.net/index.html
補足
非常にためになりました。ありがとうございます。 最後に聞きたいのですが、時間がAM,PMで表示される のではなく24時間で表示される方法と、A1だけでなく A列すべてにこれが適用されるのはどうすればいいですか? お願いします。
- marbin
- ベストアンサー率27% (636/2290)
ワークシートのチェンジイベントでの方法です。 シートタブを右クリック ↓ コードの表示 ↓ 開いたウィンドウに下記のコードをコピペ -------------- Private Sub Worksheet_Change(ByVal Target As Range) 'A1セル以外が変更されたら何もしない If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 'A1の値のが0より大きく6より小さかったらA2に現在時刻を代入 'それ以外のときは何もしない(A2セルの値はクリアしない) If 0 < Target.Value And Target.Value < 6 Then Range("A2").Value = Time End Sub ---------- 右上の赤×でウィンドウを閉じる でA1セルに入力した値によってA2に現在時刻が自動入力されます。
- marbin
- ベストアンサー率27% (636/2290)
大変失礼ですが・・・。 Caryo_tさんの方法ですと、A1以外が変更されたときも A2の時刻が書き換えられてしまいますよ。
補足
確かに書き換えられました。 もしよろしければ教えてもらえませんか?
- Caryo_t
- ベストアンサー率45% (112/246)
こんなもんでどうでしょう。A2に,以下の式を入れてください。 =IF(AND(A1>=1,A1<=5),HOUR(NOW()) & ":" & MINUTE(NOW()) & ":" & SECOND(NOW()),"") 時刻は,「時:分:秒」で並んでますので,要らない部分は消してください。
- marbin
- ベストアンサー率27% (636/2290)
自動で、となるとVBAになります。 ワークシートのチェンジイベントを使用します。 手動なら、 Ctrl + : で現在時刻を入力できます。 日付は Ctrl + ; で入力できます。
補足
返事ありがとうございます。 Excel少し苦手なのでもう少し詳しくやり方を教えて もらえないでしょうか?
お礼
非常にありがとうございました! できました。本当に感謝です。