本ページはプロモーションが含まれています
エクセルでデータ入力する作業があるんだよ。
日付と時間を入力しなきゃいけないんだけど
毎回入力するのが面倒で・・・。
方法は2つね。
1つ目はショートカットキーを使う。
2つ目はVBAを使って
特定の列にデータが入力されたら別のセルに日付と時間を自動入力させる。
VBAか~。
やったことないからわからないよ。
入力方法から、保存の仕方まで全部紹介するね。
データ入力された日付と時間を自動入力する方法
VBAエディターを開く
用意したサンプルシートはこちら。
C列にデータ入力されたらA列に日付、B列に時間を自動表示させる方法を紹介します。
用意したサンプルシートはこちら。
C列にデータ入力されたらA列に日付、B列に時間を自動表示させる方法を紹介します。
まず、シートのところ右クリック。
そして「コードの表示」をクリック。
すると、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はここまで、このまま右上の閉じるをクリックして閉じてください。
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行目から下だけ
日付と時間の自動入力がされるようになりました。
12行目の項目を削除した時は
日付と時間は更新されていません。
このブックを保存する
VBAコードが入力されているので通常の拡張子で保存しようとすると確認メッセージが表示されます。
正解の保存方法はこちら。
ファイルの種類を
Excelマクロ有効ブック(*.xlsm)
にして下さい。
おまけ:日付と時間を簡単入力するショートカットキー
ちらりと書いた日付と時間を入力するショートカットキーも紹介しておきます。
けっこう便利ですよ。
日付 | Ctrl + ; (セミコロン) |
時間 | Ctrl + : (コロン) |
ほかにもいろいろ書いてます
↓ 下記からご覧ください
サイトマップ
ブックマークして頂けると嬉しいです
よろしくお願いいたします
コメント
列、行反対にするときはどうすればいいのでしょうか?
こちらでいかがでしょうか?
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
はじめまして、日付と時間の自動入力を色々調べていましたが、関数だと他の項目に入力すると更新してしまい悩んでいました。
このページをたまたま探し当てることが出来、問題が解決できそうです。
質問です。
列の選択と結果入力は理解できましたが、この式だと1列目から始める形式になりますが、例えばC行の10列目から始める場合はどのようにすれば良いのでしょうか?
お手数おかけしますが、よろしくお願いします。
ギンコさん、コメントありがとうございます。
たぶんあってると思いますが
ブログに追記しました。
ご確認ください。
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 で条件を追加しても同じ結果になります。
早速のご対応誠にありがとうございました!
言い方が紛らわしくて申し訳ありません。
デリートキー等でセルを削除したとき、日付が消える方法はありますでしょうか?
すいません。
そういう意味ですね。
こちらでいかがでしょうか。
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
複数個所に同じ処理をしたいのですが、
同じ行内の 3列目、7列目、11列目に文字が入力されると
それぞれ、4、8、12列目に日付、5、9、13列目に時間を入れるにはどのように
繰り返せばよいのか教えて頂けないでしょうか
こちらでいかがしょうか
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
間違って入力済みの対象セルを触った場合も時刻が変わってしまう。
入力済みのセルを不変にできますか?
記載ありますよ