エクセルでデータ入力された日付と時間を自動入力する方法

エクセルでデータ入力された日付と時間を自動入力する方法

エクセルでデータ入力された日付と時間を自動入力する方法 EXCEL
エクセルでデータ入力された日付と時間を自動入力する方法

本ページはプロモーションが含まれています

エクセルでデータ入力する作業があるんだよ。
日付と時間を入力しなきゃいけないんだけど
毎回入力するのが面倒で・・・。

方法は2つね。
1つ目はショートカットキーを使う。
2つ目はVBAを使って
特定の列にデータが入力されたら別のセルに日付と時間を自動入力させる。

VBAか~。
やったことないからわからないよ。

入力方法から、保存の仕方まで全部紹介するね。

データ入力された日付と時間を自動入力する方法

VBAエディターを開く

用意したサンプルシートはこちら。
C列にデータ入力されたらA列に日付、B列に時間を自動表示させる方法を紹介します。

用意したサンプルシートはこちら。
C列にデータ入力されたらA列に日付、B列に時間を自動表示させる方法を紹介します。

エクセルでデータ入力された日付と時間を自動入力する方法 サンプルシート

まず、シートのところ右クリック。
そして「コードの表示」をクリック。

エクセルでデータ入力された日付と時間を自動入力する方法 コードの表示をクリック

すると、VBAエディターが開きます。
ここにコード入力します。

エクセルでデータ入力された日付と時間を自動入力する方法 VBAエディター

VBAのコードを入力する

入力が面倒だと思うのでコードを貼っておきますね。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range
  For Each r In Target
    If r.Column = 3 Then
       r.Offset(0, -1).Value = Format(Now, "hh:mm:ss")
       r.Offset(0, -2).Value = Format(Now, "yyyy/mm/dd")
    End If
  Next r
End Sub
エクセルでデータ入力された日付と時間を自動入力する方法 コード入力

さきほどの
C列にデータ入力されたらA列に日付、B列に時間を自動表示させる方法
の部分を説明すると
r.Column = 3
というのが「C列に」の事です。
仮にA列にしたいなら 3を1に変えてください。

r.Offset(0,-1) が 入力したセルの上下に0個、左右にー1個移動したセルを指定。
そこに表示形式が hh:mm:ss (時間:分:秒)時間で表示させます。

ここも好きなように調整して下さい。
秒がいらないのであれば hh:mm で大丈夫です。
その下も同様でこちらは日付を表示させてます。

VBAはここまで、このまま右上の閉じるをクリックして閉じてください。

エクセルでデータ入力された日付と時間を自動入力する方法 VBAエディターを終了する
Excelの魔術師へ! さいしょの一歩

実際に使ってみる

C列になんでもいいので入力してください。
A列に日付、B列に時間が自動入力されます。

エクセルでデータ入力された日付と時間を自動入力する方法 日付と時間の自動入力が完成

先ほどの説明を参考にして、
業務にあったシートレイアウトやコードに作り替えてくださいね。

行番号も条件を追加

質問頂きました。

10行目から下にだけ適用したい時は?

入力を削除したときは変更しないようにするには?

こちらのコードで大丈夫。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range
  For Each r In Target
    If r.Column = 3 And r.Row >= 10 Then
        If Cells(r.Row, r.Column) <> "" Then
            r.Offset(0, -1).Value = Format(Now, "hh:mm:ss")
            r.Offset(0, -2).Value = Format(Now, "yyyy/mm/dd")
        End If
    End If
  Next r
End Sub

さっきと違うのは
And r.Row >= 10
を追加。
行番号が10より大きかったら
日付と時間の自動入力をするようにしました。

もう1かしょ。
If Cells(r.Row, r.Column) <> “” Then
処理
End If
を追加。
セルの内容をDeleteで削除した時は
日付と時間を更新しないようにしました。

実行してみます。
上から順にC列に入力していきました。
最後に12行目のC列を削除。

エクセルでデータ入力された日付と時間を自動入力する方法 10行目までは対象外にする&削除したときは入力日時を更新しない

10行目から下だけ
日付と時間の自動入力がされるようになりました。
12行目の項目を削除した時は
日付と時間は更新されていません。

Excelの魔術師へ! さいしょの一歩

このブックを保存する

VBAコードが入力されているので通常の拡張子で保存しようとすると確認メッセージが表示されます。

エクセルでデータ入力された日付と時間を自動入力する方法 確認メッセージ

正解の保存方法はこちら。
ファイルの種類を
Excelマクロ有効ブック(*.xlsm)
にして下さい。

エクセルでデータ入力された日付と時間を自動入力する方法 EXCELマクロ有効ブックで保存

おまけ:日付と時間を簡単入力するショートカットキー

ちらりと書いた日付と時間を入力するショートカットキーも紹介しておきます。
けっこう便利ですよ。

日付Ctrl + ; (セミコロン)
時間Ctrl + : (コロン)
Excelの魔術師へ! さいしょの一歩

ほかにもいろいろ書いてます
↓ 下記からご覧ください
サイトマップ
ブックマークして頂けると嬉しいです
よろしくお願いいたします

コメント

  1. shimi より:

    列、行反対にするときはどうすればいいのでしょうか?

    • seigi-ojisan より:

      こちらでいかがでしょうか?
      3行目にデータを入力すると1行目に日付、2行目に時間が入力されます。

      Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      Dim r As Range
      For Each r In Target
      If r.Row = 3 Then
      r.Offset(-1, 0).Value = Format(Now, “hh:mm:ss”)
      r.Offset(-2, 0).Value = Format(Now, “yyyy/mm/dd”)
      End If
      Next r
      End Sub

  2. ギンコ より:

    はじめまして、日付と時間の自動入力を色々調べていましたが、関数だと他の項目に入力すると更新してしまい悩んでいました。
    このページをたまたま探し当てることが出来、問題が解決できそうです。
    質問です。
    列の選択と結果入力は理解できましたが、この式だと1列目から始める形式になりますが、例えばC行の10列目から始める場合はどのようにすれば良いのでしょうか?
    お手数おかけしますが、よろしくお願いします。

  3. ギンコ より:

    seigi-ojisanさん 早々に返答ありがとうございました。
    問題なく導入できました。
    本当にたすかりました。

    ありがとうございました。

    • tkm_mrkm より:

      お世話になっております。
      デリートキー等でセルを削除しても日付等が入ってしまいますが、
      セルを空白にした場合、日付等が入らない設定には出来ますでしょうか?

      • seigi-ojisan より:

        tkm_mrkmさん

        こんな感じでどうでしょう。
        Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        Dim r As Range
        For Each r In Target
        If r.Column = 3 And r.Row >= 10 Then
        If Cells(r.Row, r.Column) <> “” Then
        r.Offset(0, -1).Value = Format(Now, “hh:mm:ss”)
        r.Offset(0, -2).Value = Format(Now, “yyyy/mm/dd”)
        End If
        End If
        Next r
        End Sub

        If Cells(r.Row, r.Column) <> “” Then
        日付と時間入力の部分はそのまま
        end if
        を追加しました。
        Deleteしたときの入力はなくなります。
        その上にあるif文に and で条件を追加しても同じ結果になります。

        • tkm_mrkm より:

          早速のご対応誠にありがとうございました!
          言い方が紛らわしくて申し訳ありません。
          デリートキー等でセルを削除したとき、日付が消える方法はありますでしょうか?

          • seigi-ojisan より:

            すいません。
            そういう意味ですね。

            こちらでいかがでしょうか。

            Private Sub Worksheet_Change(ByVal Target As Excel.Range)
            Dim r As Range
            For Each r In Target
            If r.Column = 3 And r.Row >= 10 Then
            If Cells(r.Row, r.Column) <> “” Then
            r.Offset(0, -1).Value = Format(Now, “hh:mm:ss”)
            r.Offset(0, -2).Value = Format(Now, “yyyy/mm/dd”)
            Else
            r.Offset(0, -1).Value = “”
            r.Offset(0, -2).Value = “”
            End If
            End If
            Next r
            End Sub

  4. しゅう より:

    複数個所に同じ処理をしたいのですが、
    同じ行内の 3列目、7列目、11列目に文字が入力されると
    それぞれ、4、8、12列目に日付、5、9、13列目に時間を入れるにはどのように
    繰り返せばよいのか教えて頂けないでしょうか

    • seigi-ojisan より:

      こちらでいかがしょうか

      Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      Dim r As Range
      For Each r In Target
      If r.Column = 3 And r.Row >= 2 Then
      If Cells(r.Row, r.Column) <> “” Then
      r.Offset(0, 2).Value = Format(Now, “hh:mm:ss”)
      r.Offset(0, 1).Value = Format(Now, “yyyy/mm/dd”)
      End If
      End If
      If r.Column = 7 And r.Row >= 2 Then
      If Cells(r.Row, r.Column) <> “” Then
      r.Offset(0, 2).Value = Format(Now, “hh:mm:ss”)
      r.Offset(0, 1).Value = Format(Now, “yyyy/mm/dd”)
      End If
      End If
      If r.Column = 11 And r.Row >= 2 Then
      If Cells(r.Row, r.Column) <> “” Then
      r.Offset(0, 2).Value = Format(Now, “hh:mm:ss”)
      r.Offset(0, 1).Value = Format(Now, “yyyy/mm/dd”)
      End If
      End If
      Next r
      End Sub

  5. にしこ より:

    間違って入力済みの対象セルを触った場合も時刻が変わってしまう。
    入力済みのセルを不変にできますか?

タイトルとURLをコピーしました