みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

セルに入力された時間を表示し固定したい

いつもお世話になっております。

例えばA列に下方向にデータが入力されていく表のB列に入力された時刻を記録したいのですが
=IF(A1="","",NOW())とすると当然次のデータ(A2)の入力時にはB1の時刻は現在時刻に更新されてしまいます。
その都度時間をコピーして値で張り付ければ良いのですが、複数の人が使うのでこの操作を自動で処理したいのですが。
つまりA1に入力が有った時点の時刻をB1に表示し、その内容(時刻)を関数(=NOW)から値(時刻)に変える様にしたいのですが。

当方マクロ不慣れなのでA列入力時にその都度入力表の上部の固定枠にマクロ「ボタン」を作ってそれを押すような仕様でもOKなのですが。(コードが簡単な方が良いです)

投稿日時 - 2019-02-15 09:16:23

QNo.9588011

困ってます

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

気に入らなければスルーで・・・
関数もマクロも使わず、現在時刻入力はキーボードショートカットでOKです。
時刻の入力は → [Ctrl]+[:]キー
日付の入力は → [Ctrl]+[;]キー

投稿日時 - 2019-02-15 11:09:26

補足

このショートカットキーを参考にマクロを「ボタン」にしました。
シンプルで当方にも分かりやすい方法で解決出来ました。

投稿日時 - 2019-02-15 16:21:48

お礼

早々のご回答ありがとうございました。

ご回答を参考に下記のマクロを「ボタン」にして解決しました。

Sub Macro5()
SendKeys "^:"
End Sub

投稿日時 - 2019-02-15 13:39:14

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

Q、A1に入力が有った時点の時刻をB1に表示したい。
A、次のようでいいのでは・・・

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$A$1" Then
    Range("B1") = Format(Now(), "hh:mm")
  End If
End Sub

Excel は一度も操作したことがないので、ちょいと調べて書いたやっつけ仕事。でも、これいいような気がします。

投稿日時 - 2019-02-15 15:20:12

ANo.3

B列に 数式 =IF(A2<>"",TODAY(),"") を入れて式を複写しておく。
B列の書式を日付にしておく。
結果例
A2:B
122019/2/15
aa2019/2/15
2019/2/15 <--ブランク入力
ーー
これを固定するには、
https://kokodane.com/mini_macro26.htm
などに3行マクロの例で載ってますが、Selectionを細工しないとならない。
そこで小生が思うのは、ブックを閉じるときに、B列を、自分自身のセルに、値複写するのはどうだろうか。
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim c As Range
For Each c In Range("A2:A20")
If Len(c) >= 1 And c.Offset(0, 1).HasFormula Then
c.Offset(0, 1).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End If
Next c
End Sub
夜11時から作業して夜1時に終わるような場合は、困るかもしれないが、そういう場合はない、と仮定して。

投稿日時 - 2019-02-15 12:20:34

補足

ご回答ありがとうございます。
データ入力が続けてある場合と日にちをまたぐ場合があります。
また同じ日でもブックを閉じてしまう時もあります。

で、結局 複数の入力担当者の意見で、日付入力セルでマクロボタンをクリックで試行してみることになりました。

セルへの入力(変更)時の自動実行もご回答いただきましたが、B列も場所によっては日付以外の入力が必要になる可能性もあるので入力セルで「ボタン」クリックが分かりやすいとの結論になりました。

Sub Time()
SendKeys "(^):"
SendKeys "{ENTER}"
End Sub

投稿日時 - 2019-02-15 16:16:36

お礼

ご回答も参考になりました。

投稿日時 - 2019-02-15 16:17:26

ANo.1

対象シートに以下のマクロでどうでしょう。
B列にセル式は不要です。

Private Sub Worksheet_Change(ByVal Target As Range)
  For Each rOne In Target
    If rOne.Column = 1 Then '変更されたのがA列で
      If rOne.Value = "" Then '値が空白ならB列も空白
        Cells(rOne.Row, 2).Value = ""
      Else '値が空白以外なら現在時刻をB列に入れる
        Cells(rOne.Row, 2).Value = Now()
      End If
    End If
  Next
End Sub

投稿日時 - 2019-02-15 10:57:24

補足

下記のお礼のあと、実際のシートで下記のコードでは駄目なことに気付きました。
早とちりでした。

キーの組み合わせにするか、ご回答のコードにするかは、作業担当者に聞いてから決めます。

投稿日時 - 2019-02-15 12:44:05

お礼

いつもお世話になっております。
早々のご回答ありがとうございます。

一発で日付と時刻が入りました。

但し、#No2さんのショートカットキーを「日付」ボタンで下記のコードで出来ることが分かったのでこれで行きます。

お手数をおかけしました。
ありがとうございました。


Sub Time()
' Time Macro
ActiveCell.FormulaR1C1 = "12:22"

End Sub

投稿日時 - 2019-02-15 12:39:16

あなたにオススメの質問