• ベストアンサー

現時刻を入力

教えてほしいのですが、A1に1~5までの数字を入力した際に A2のセルに現時刻が入力されるようにすることは可能なんですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.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

goku716
質問者

お礼

非常にありがとうございました! できました。本当に感謝です。

その他の回答 (7)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.7

>時間がAM,PMで表示されるのではなく24時間で表示される方法 Foramt関数 を使います。 表示セル.Value = Format(Time ,"h時m分s秒") というような感じになります。 セルの表示形式を変えておく、という手もあります。 表示セル.NumberFormatLocal = "h:mm:ss;@" 「表示セル」は↓によって変わってきます。 >A1だけでなくA列すべてにこれが適用されるのはどうすればいいですか? A1が書き換えられたときにA2のセルに時刻を入力するものですが、 A列全体 となると、時刻はどこに入力するようにしますか? ※いまから外出しますので、レスは18時以降になるかもしれません。

goku716
質問者

補足

B列です。忙しいのにすいません。

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.6

caryo_tです。 確かに自動計算で変わってしまいますねぇ。 (;^^) 「自身あり」というのは撤回です。お恥ずかしい。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.5

なぜA1以外を書き換えたときも A2セルの値が変わったかと言いますと、 「自動計算」機能が働いたからです。 手動計算にしておくと今度はどのセルの値を 変えても再計算されませんので不具合が出ます。 シートごとに再計算のオン/オフは切り替えら れたと思いますが、セルごとに、は出来なかっ たと思います。 それで、マクロのシートのイベントで、マクロが 実行されるセル範囲を限定して、という方法が よく使われます。 今回はセルの値を変えたときに自動実行する マクロですが、 選択セルを移動したときに セルを右クリックしたとき セルをWクリックしたとき などにマクロを自動実行する機能(イベント) もあります。 http://www.k1simplify.com/vba/tipsleaf/leaf311.html VBA入門サイトです。 こちらにもシートのイベントの記述があります。 http://excelvba.pc-users.net/index.html

goku716
質問者

補足

非常にためになりました。ありがとうございます。 最後に聞きたいのですが、時間がAM,PMで表示される のではなく24時間で表示される方法と、A1だけでなく A列すべてにこれが適用されるのはどうすればいいですか? お願いします。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.4

ワークシートのチェンジイベントでの方法です。 シートタブを右クリック ↓ コードの表示 ↓ 開いたウィンドウに下記のコードをコピペ -------------- 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)
回答No.3

大変失礼ですが・・・。 Caryo_tさんの方法ですと、A1以外が変更されたときも A2の時刻が書き換えられてしまいますよ。

goku716
質問者

補足

確かに書き換えられました。 もしよろしければ教えてもらえませんか?

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.2

こんなもんでどうでしょう。A2に,以下の式を入れてください。 =IF(AND(A1>=1,A1<=5),HOUR(NOW()) & ":" & MINUTE(NOW()) & ":" & SECOND(NOW()),"") 時刻は,「時:分:秒」で並んでますので,要らない部分は消してください。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

自動で、となるとVBAになります。 ワークシートのチェンジイベントを使用します。 手動なら、 Ctrl + : で現在時刻を入力できます。 日付は Ctrl + ; で入力できます。

goku716
質問者

補足

返事ありがとうございます。 Excel少し苦手なのでもう少し詳しくやり方を教えて もらえないでしょうか?

関連するQ&A