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

このQ&Aのポイント
  • エクセルで1行目に入力したデータに応じて2行目に日付と時間を自動入力する方法について教えてください。
  • VBAを使用して、エクセルで1行目に入力したデータに応じて指定されたセルに日付と時間を自動入力する方法について詳しく教えてください。
  • エクセルのVBAを活用して、1行目にデータを入力すると、指定したセルに日付と時間を自動入力する方法を教えてください。
回答を見る
  • ベストアンサー

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

前回ご質問にて 1行目に何か入力したら2行目に日付と時間を自動入力する というVBAを教えて頂きました。 ------------------------ Private Sub Worksheet_Change(ByVal Target As Excel.Range) Application.EnableEvents = False If Target.Row = 1 Then Target.Offset(1, 0).Value = Format(Now, "yyyy/mm/dd"" ""hh:mm:ss") End If Application.EnableEvents = True End Sub ------------------------ これを1行目に何か入力したら2行目に日付と時間ではなく セル指定を行いたいのです。 例)F13~P13に何か入力したら、その下のセルの F14~P14に日付と時間が自動入力される という作りです。 よろしくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

F13~P13を変更したらでしたら Private Sub Worksheet_Change(ByVal Target As Excel.Range) Application.EnableEvents = False If Not Intersect(Target, Range("F13:P13")) Is Nothing Then Target.Offset(1, 0).Value = Format(Now, "yyyy/mm/dd"" ""hh:mm:ss") End If Application.EnableEvents = True End Sub になりますが、削除しても日付が変更されてしまいます。 削除した場合日付を変更しないのでしたら (複数一度に削除した場合の事を考えたらFor Each~Nextはあった方が良かったです) Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range Application.EnableEvents = False For Each r In Target If Not Intersect(r, Range("F13:P13")) Is Nothing And r.Value <> "" Then r.Offset(1, 0).Value = Format(Now, "yyyy/mm/dd"" ""hh:mm:ss") End If Next r Application.EnableEvents = True End Sub

simizuchi
質問者

お礼

ありがとうございます。 勉強になります。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

No.1の追加です。 入力するセルのデータを削除した時に日付も削除したい場合です。 (念のために日付を削除するかどうか確認します) 「r」一文字だと見落としそうなので「mRng」に変更しています。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim mRng As Range Application.EnableEvents = False For Each mRng In Target If Not Intersect(mRng, Range("F13:P13")) Is Nothing Then If mRng.Value = "" Then If MsgBox("日付も削除しますか?", vbYesNo + vbDefaultButton2) = vbYes Then mRng.Offset(1, 0).Value = "" End If Else mRng.Offset(1, 0).Value = Format(Now, "yyyy/mm/dd"" ""hh:mm:ss") End If End If Next mRng Application.EnableEvents = True End Sub

simizuchi
質問者

お礼

ありがとうございました。 すごく助かりました。

関連するQ&A

  • エクセルで日付と時間を自動入力する

    エクセルでF13~P13に何か入力したら、その下のセルの F14~P14に日付と時間が自動入力される という質問、回答を見つけました。 これで日付を削除するかどうかのメッセージボックスを出さずに 入力するセルのデータを削除した時に日付も削除するには どの部分を削除すれば良いですか? Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim mRng As Range Application.EnableEvents = False For Each mRng In Target If Not Intersect(mRng, Range("F13:P13")) Is Nothing Then If mRng.Value = "" Then If MsgBox("日付も削除しますか?", vbYesNo + vbDefaultButton2) = vbYes Then mRng.Offset(1, 0).Value = "" End If Else mRng.Offset(1, 0).Value = Format(Now, "yyyy/mm/dd"" ""hh:mm:ss") End If End If Next mRng Application.EnableEvents = True End Sub

  • VBA/エクセルの日付入力でYYYYMMDD

    エクセル2013です。 特定のセルに日付を入力してもらうのですが、人によりさまざまな入力をされてしまいます。 どんな入力でも日付であれば、シリアル値なのであとからなんとかなるのですが、困るのはYYYYMMDDの連続数字、例えば今日なら20140712と入力されてしまうことです。 入力規則で排除したいのですが、それは許されず、20140712も日付として扱わなければならなくなりそうです。 そこでマクロで対処しようと以下のコードを書きました。 Private Sub Worksheet_Change(ByVal Target As Range)   Select Case Target.Address(0, 0)     Case "D2", "F2", "C4"       If Target.Value = "" Then Exit Sub       If IsDate(Target.Value) Then         Target.NumberFormatLocal = "yyyy/m/d"       Else         Application.EnableEvents = False         Target.Value = CDate(Format(Target.Value, "@@@@/@@/@@"))         Application.EnableEvents = True       End If     Case Else       Exit Sub   End Select End Sub これで最初はうまくいき、20140712と入力されても、ちゃんと2014/7/12になります。 ところが、同じセルに再度YYYYMMDD数字形式で入力すると、実行時エラー「オーバーフローしました」になってしまいます。多分セルが、YYYYMMDDの数字をシリアル値として見てありえない日付と判断したのだと思います。 どのようにコードを修正したらよろしいでしょうか? もう1点、日付をYYYYMMDDの連続数字で入力することは普通、エクセルではあまり見たことないですが、これって一般的な方法なのでしょうか?

  • VBAの日付チェックでオーバーフローを回避したい。

    VBAの日付チェックでオーバーフローを回避したい。 ExcelのG列のセルに入力されたものが日付型であるかどうかのチェックかけたいと思います。 以下のコードだと、数字2958466以上の入力でオーバーフローが発生します。 これを回避する方法はありますか? セルを日付型に設定しているため、2958465(2999/12/31)までしか判別できないのでしょうが、 利用者が2958466以上を入力してしまう可能性はあります。 オーバーフローではなく、エラーメッセージが出せたら・・・と思います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 8 Then Application.EnableEvents = False If Target <> "" And Not IsDate(Target) Then MsgBox "日付型で入力してください。" & vbCrLf & "(例:2010/10/31)", vbCritical, "入力エラー" Target = "" Target.Select End If Application.EnableEvents = True End If End Sub こんなコードも試しましたが、結果は同じでした。 ↓ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 8 Then Application.EnableEvents = False If Target > 2958466 Then MsgBox "日付型で入力してください。" & vbCrLf & "(例:2010/10/31)", vbCritical, "入力エラー" Target = "" Target.Select Else If Target <> "" And Not IsDate(Target) Then MsgBox "日付型で入力してください。" & vbCrLf & "(例:2010/10/31)", vbCritical, "入力エラー" Target = "" Target.Select End If End If Application.EnableEvents = True End If End Sub On Error Resume Next や On Error GoTo ... での対処も考えましたが、同じ結果でした。 何か良い方法がありましたら、お願いいたします。

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

    A1をA2に、B1をB2に、C1をC2に・・・ A1に入力したらA2に更新日付が入るという様に行いたいのですが、 ---------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r.Column = 1 Then r.Offset(0, 1).Value = Format(Now, “yyyy/mm/dd”“ ”“hh:mm:ss”) End If Next r End Sub ---------------- これをどのように改編したらいいのでしょうか?

  • VBAの時間入力について

    先日、時間を文字列で、HH:mmのフォーマット入力するPGを教えて頂き、 内容理解をしているのですがわからない部分があります。 ★の部分の条件で、00:00も入力したいです。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から 'Intersect:http://officetanaka.net/excel/vba/tips/tips118.htm 'Is Nothing:nullではない 'Selection.Count <> 1:選択数が1以下ではない(<> :等しくない) ' Not IsNumeric(Target):数値ではない If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub ' 'Target:セルの値は24:00以下 '2つの数値の除算を行いし,その剰余を返す 'Mod:2つの数値の除算を行いし,その剰余を返す '★ここで00:00時も入力したい。 If Target <= 2400 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

  • エクセル VBA セルに値を入力したら入力日を表示

    エクセルに不慣れなため、質問が分かりづらかったら申し訳ありませんがご回答をお願いいたします。 エクセルファイルにある項目を入力したら、入力日を自動表示させたいと考えています。 セルB2に何かを入力したら、4行下のB6に入力日が自動表示 セルB10に何かを入力したら、6行下のB20に入力日が自動表示 セルB20に何かを入力したら、6行下のB26に入力日が自動表示 下記のサイトでB2に対する処理は出来ましたが、 B10・B20に対して処理が行えません。 B2に対するコードは下記の通りとしていますが、このコードにB10・B20に対するコードを追加するにはどうしたらよいでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> "B2" Then Exit Sub Application.EnableEvents = False Target.Offset(4, 0).Value = Now Application.EnableEvents = True End Sub https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413855689

  • マクロに詳しい方!エクセルの日付入力について

    エクセルの日付入力について、例えばB列に何か入力したら自動的にA列に入力した日がB列に表示されるようにする方法(TODAY関数のように常に現在の日付ではなく、入力した日のまま固定にする方法)について検索したところ、下記の通り、マクロをつかった回答がありました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1413916824 B列に入力し、A列に日付を書き込む場合 B1→A1 B2→A2 B3→A3 … -------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub Application.EnableEvents = False Target.Offset(, -1).Value = Now Application.EnableEvents = True End Sub -------------------- 小生はマクロが分かりませんが、上記のコードをコピペ入力すると、その通りになりました。 そこで、みなさんにご相談ですが、これをA列に入力→B列に日付、C列に入力→D列に日付、E列に入力→F列に日付・・・・・というようにしたいのですが、そのコードを教えて頂けないでしょうか。 何卒お知恵をお借りしたくお願い致します。

  • 日付の自動表示がうまくできません。

    VBAを使って、EXCELで日付を自動表示するマクロを作ったのですが、うまく動作しません。 設定の条件は、(対象の行は6~31行目で) D列に入力があった場合、G列に日付を表示、 M列に入力があった場合、N列に日付と時間を表示 です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Integer, c As Integer 'r 行番号 'C 列番号 r = Target.Row c = Target.Column If Target.Count > 1 Then Exit Sub If c <> 13 Or r < 6 Or r > 31 Then End If Cells(r, c) <> "" Then If c = 13 Then Cells(r, c + 1) = Format(Now, "m/d hh:mm") Else Cells(r, c + 1) = "" End If If Target.Count > 1 Then Exit Sub If c <> 4 Or r < 6 Or r > 31 Then End If Cells(r, c) <> "" Then If c = 4 Then Cells(r, c + 3) = Format(Now, "m/d hh:mm") Else Cells(r, c + 3) = "" End If End Sub 作っているうちに、どこがおかしいのかわからなくなってしまいました。 助けて頂ければと思います。

  • [VBAマクロ] Private Sub

    以下のコードは、ある任意のテーブルの最終行に何か入力すると自動的に新しい行を追加します。(例えば、TotalVal をセルR5に名前定義して、4行目に何か入力するとマクロが走って5行目に新規の行が挿入されます。) 新規の行を入力するだけでなく、直前行の計算式とフォーマット形式もコピーして行の挿入をするにはどうしたらよいか、どなたかご教示していただけませんでしょうか。よろしくお願います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = [TotalVal].Row - 1 Then Application.EnableEvents = False [TotalVal].EntireRow.Insert Application.EnableEvents = True End If End Sub

  • 時間フォーマット VBA

    VBA初心者です。Javaなどはある程度できるレベルのものです セルにHH:mmフォーマットで時間を入力したくて以下のコードで実行すると12列目は正常に入力でき、 13列目にも同じように指定シたいです。 試したのは If IntersectからEnd Ifまでを最終行の手前にColumns(13)で全体を追加しました。 しかし、13列目はVBAが効いていません また、12列目に入力した値を消すと : (コロン)が残ってしまいます。 また、ThisWorkBookにこのコードを書いてもVBAが効いていません。 このファイルは作業中のシートに対するものでしょうか。 だとしたら、作業中シートに対して行うにはどう書いたらよいのかわからずにおります。 細かい質問ですみません。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 Or Not IsNumeric(Target) Then Exit Sub ' Debug.Print "Target==" & Target If Target <= 2359 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

専門家に質問してみよう