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

このQ&Aのポイント
  • エクセルの日付入力について、例えばB列に何か入力したら自動的にA列に入力した日がB列に表示される方法について検索したところ、マクロを使った回答がありました。
  • マクロのコードをコピペすると、B列に入力するとA列に日付が自動的に表示されるようになります。
  • A列に入力→B列に日付、C列に入力→D列に日付、E列に入力→F列に日付・・・・・というようにするには、どのようなコードを使えば良いでしょうか。
回答を見る
  • ベストアンサー

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

エクセルの日付入力について、例えば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列に日付・・・・・というようにしたいのですが、そのコードを教えて頂けないでしょうか。 何卒お知恵をお借りしたくお願い致します。

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

  • ベストアンサー
  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.3

あ、前の回答だと、B,D,F・・・列に入力すると、C,E,G列にも日付が入ってしまいますね。 2行目を取り除くのでなく、 If (Target.Column mod 2)=0 Then Exit Sub (偶数番目の列に入力された場合は除外) としてください。

hotaruiwa
質問者

お礼

ありがとうございます~!こちらで、完璧できました!ホント助かりましたm(_ _)m

その他の回答 (2)

noname#203218
noname#203218
回答No.2

下記のようなマクロで可能です。 入力は日付に限定されません、値なら全て右隣のセルに出力されます。 Private Sub Worksheet_Change(ByVal Target As Range) If Not (Target.Column = 1 Or Target.Column = 3 Or Target.Column = 5) Then Exit Sub Application.EnableEvents = False Target.Offset(, 1).Value = Target.Value Application.EnableEvents = True End Sub

hotaruiwa
質問者

お礼

ありがとうございます!ただ、これだと、奇数列に入力したものが偶数列に反復されるものなんですよね。奇数列に何かしら入力したら偶数列に入力日を記録したいという趣旨でした。言葉足らずでスミマセン。。。でもでも、ありがとうございました!!

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.1

2行目の > If Target.Column <> 2 Then Exit Sub を取り除く(元の文は、B列に入力があった場合に限定する) 4行目の >Target.Offset(, -1).Value = Now の-1 を+1 (たんに1)にする だけだと思います。試してないのですが.....

関連するQ&A

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • Excel で日付入力したらマクロが動く方法

    Excel 2003 です。(OSはXP) データ用のエクセルファイルからマクロでコピー貼り付けをする日報ファイルを作っています。構成シートが7枚、マクロは12モジュール、ファイルサイズが140MBという巨大なものです。 セルB2に日付を入力したとき、Macro1が動くようにしたいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub Else... 以外に何かうまい方法はないでしょうか? セルに値を入力、じゃなくて、何かのコントロールでもかまいません。 マクロで日付を読み込めることが必須条件です。 上述のマクロの活用方法はいろいろ読みましたが、処理に時間がかかって困っております。「全てのセルに変更が加えられたのを検知」するしか方法はありませんか? 一応、この Macro1 を呼び出す部分以外には Application.EnableEvents = False を入れて、Worksheet_Changeが反応しないように止めていますが、遅いような気がします。(計ったわけではないのですが。) この日報ファイル自体が、計算の塊で、1つのセルに数値を入力しただけで、再計算に1秒前後かかることがあります。 そこで、貼り付けのマクロ(Macro2)を動かすときには Application.Calculation = xlManual を入れたりもしているのですが(それでも貼り付けに1分30秒)、常に再計算をOFFにするわけにもいかず・・・。 だから「全てのセルに変更が加えられたのを検知」という命令は、時間短縮のため避けたいのです。 また、マクロの全てにEnableEventsを入れておくのも、見苦しくて。(新たにマクロを追加したらまた忘れずにEnableEventsを書かないといけない構造にしたくありません。) 「全てのセルに変更が加えられたのを検知」ではなく、特定のオブジェクトに日付が入力された・選択されたのをマクロの開始合図とすることはできませんでしょうか? 質問がわかりにくかったらすみません。よろしくお願いします。

  • 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の連続数字で入力することは普通、エクセルではあまり見たことないですが、これって一般的な方法なのでしょうか?

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • エクセル 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

  • エクセル:シート内に入力があった場合のマクロの書き方

    シート内に入力があった時の処理を作作りたいです。 現状の作り方は、シートのコードにWorksheet_Changeを用意し、 その中に「Target.Addressを取得し、そのアドレスに応じて処理をする」と書き込んでいます。 例えば以下は、入力があったら3列離れた同じ行に同じ内容入力をする、というコードです。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim T_row As Integer, T_col As Integer   T_row = Target.Row   T_col = Target.Column + 3   Application.EnableEvents = False   Cells(T_row, T_col).Value = Target   Application.EnableEvents = True End Sub このコードの作り方だと、1つのセルへの入力にしか対応しないというか、 ドラッグやコピー&ペースト等、複数のセルにまたがった操作をすると動きません。 そういった通常可能な操作にも対応できるように作っていきたいのですが、 その場合どのように書き始めていけばよいでしょうか。 面倒な質問となってしまいましたが、 お時間あればよろしくお願いします。

  • セル範囲に変化があったときに日付けが入るマクロ

    お世話になっております。 以前、A1からS19までのセルに変化があったときに日付けが入るマクロについて、 この掲示板で質問させていただいた者ですが、さらに伺いたいことがあります。 そのときは、以下のプログラムを教えていただきました。 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("A1:S19"))   application.enableevents = false    cells(h.row, "T") = date   application.enableevents = true  next end sub しかし、質問の時点でご指摘のあったことではあったのですが、このプログラムだと 値を変更したとき、セルをダブルクリックして編集可能にしたときだけではなく、 A列からS列に列を挿入したとき、又は列を削除したときも一斉にT列に日付け が入ってしまいます。 列の挿入・削除の場合は、日付けが入らないようにすることは可能でしょうか? 教えていただけると幸いです。よろしくお願いいたします。

  • エクセルでデータを変更・入力した時だけ日付が更新される方法

    QNO.2915892を参考にさせていただき、マクロを設定しました。 正常に作動したのですが、その後シートの一部が変更できないように、ロックをかけることになりました。 するとロックのかかっている状態だと、このコードでは日付が更新されませんでした。 そこで、ロックのかかっていないセルのデータを更新した時だけ、 任意のセルに今日の日付(更新日)が自動で入るようにしたいです。 つまりエクセルを開いただけで、データを修正しなかったら日付は変わらないようにしたいです。 この場合はこのコードに何を足したり、どこを変更したらよいのでしょうか? もしくは全く別のものになるのでしょうか? 別のものであれば、それを教えていただけると助かります。 コードの意味はほとんどわかっていません。。。 *****以下今使っているコードです******** Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Range("B1") = Format(Date, "yyyy/m/d") Application.EnableEvents = True End Sub *********************以上**** どなたかよろしくお願いします。

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

    前回ご質問にて 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に日付と時間が自動入力される という作りです。 よろしくお願いします。

  • エクセルのマクロについて

    以前、こちらのマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub Application.EnableEvents = False Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart Application.EnableEvents = True End Sub 指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。 しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか?? 説明が分かりづらくすみません・・・・・・。 もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。 よろしくお願いします。

専門家に質問してみよう