• ベストアンサー

Excelで日付を挿入

このセルを入力した日付を、こっちのセルに自動で入れる方法を教えて下さい。 入力日なので、TODAY() では上手くいきません。 セルが入力されて居ないときは、空白にしたくて、=IF(A1="","",TODAY()) なんて事もしてみたのですが、現在の日付で入力日ではないので上手くいきません(当たり前ですが…) 多分No.101と同じ質問だと思うのですが、何せ初心者なので意味が判りません。 もう少し判り易く教えていただけるとありがたいです。お願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

>B4…A4と言う感じに、入力するセルと、日付を入力させたいセルは同じ行内で、200行以上あります。 内容がはっきりすれば、複雑そうな問題も返って簡単になったりします。 入力の左側が出力セルなので、出力範囲の指定は不要で、『Offset(0, -1)』で入力セルの左を指定しています。 重複するコメント部分は省略しました。 Const 入力範囲 = "B2:B200" '自分で指定します!! Private Sub Worksheet_Change(ByVal Target As Range)   Dim inpRange As Range '入力するセル範囲   Dim rg As Range '単一セル   On Error GoTo ErrorHandler   Set inpRange = Range(入力範囲)   Application.EnableEvents = False   '入力範囲の単一セルを操作した時、   '複数セルを操作して入力した時、消去した時に正常に動くように単一セルで処理する   For Each rg In Target     If Not Intersect(inpRange, rg) Is Nothing Then       If rg.Text <> "" Then         '入力があれば日付を入力したセルの左に書き込む         rg.Offset(0, -1) = Format(Now(), "yyyy/mm/dd")       Else         '入力を消去したら日付を消去する         rg.Offset(0, -1) = ""       End If     End If   Next   Application.EnableEvents = True   Exit Sub ErrorHandler:   Application.EnableEvents = True End Sub

LiLi39
質問者

お礼

ほんとうに何度もありがとうございました。 とても助かりました。 これを機会に、少しVBAと、大いに日本語の勉強をしたいと思います。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>このセルを入力した日付を、こっちのセルに自動で入れる方法を教えて下さい。 >入力日なので、TODAY() では上手くいきません。 意味を理解しているやら・・・自分なりに言葉を変えてみました。   あるセルに入力をした時、その日の日付(入力日:入力している時の日付)を、   別のセルに自動で書き込みたい。   TODAY()などの関数を使えば書き込めるが、次に(別の日に)Bookを開くと、   入力日だった日付が当日に書き換わってしまう。       ・・・あってる? (1)算式を埋め込めば日付は表示できますが、Today()もNow()も固定した日付にはできません。    保存する時に値に変えてしまえば別ですが。 (2)ショートカットキー『Ctrl+;(セミコロン)』でToday()の日付を固定した日付として入力できます。    未入力の場合は『Ctrl+;』をしなければいいですが、入力値を消した場合は日付を消す必要があります。 (3)マクロを使う方法です。(Sheet1での例です)    ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラで    プロジェクトエクスプローラを表示します。    プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロを    コピーして貼り付けます。      Const 入力範囲 = "B2:D10"      Const 出力範囲 = "E2"    の2行は例です。ご自分のシートの要件に合うように修正してください。    今は、B2:D10に入力があれば、E2にその日の日付を書いています。各行コメントを参照して下さい。 ここから ↓ 'この入力範囲に入力があれば次の『出力範囲』に日付を書きます。自分で指定します!! Const 入力範囲 = "B2:D10" '日付を書くセル。自分で指定します!! Const 出力範囲 = "E2" ' Private Sub Worksheet_Change(ByVal Target As Range)   Dim inpRange As Range '入力するセル範囲   Dim outRange As Range '出力セル   'エラーが起きた時の対応   On Error GoTo ErrorHandler   '入力するセル範囲を定義   Set inpRange = Range(入力範囲)   'マクロでセルの内容を書き換える(日付を書く)が、再度イベントが起きないようにする   Application.EnableEvents = False   'Intersectは、複数のセル範囲の共有セル範囲を表します   '  入力範囲(inpRange)と入力したセル(Target)の共有セルを求め、   '  共有セルがあれば、指定した入力範囲への入力と判断して次の処理を行う   If Not Intersect(inpRange, Target) Is Nothing Then     '出力するセルに日付を値として出力します。     '値なので、次にBookを開いても更新されません。     Range(出力範囲) = Format(Now(), "yyyy/mm/dd")   End If   '入力した後、入力範囲を調べて、何も入力されていなかったら、   '出力範囲に書き出した日付を消去しています。   'この処理が不要なら、If~End If の3行を削除します。   If Application.CountA(inpRange) = 0 Then     Range(出力範囲) = ""   End If   '次の入力のために、イベントが起きるようにする   Application.EnableEvents = True   Exit Sub ErrorHandler:   'エラーが起きたら、イベントが起きるようにしてマクロを終わる   Application.EnableEvents = True End Sub

LiLi39
質問者

補足

言葉足らずですみません。 上記だと、日付を書くセルは一箇所になるのですか? B2セルに入力した時に、A2セル B3セルに…A3セル B4…A4と言う感じに、入力するセルと、日付を入力させたいセルは同じ行内で、200行以上あります。 全てが同じ日に入力するのではなく、この日に3行、この日は10行入力することもある…って感じなのですが。 まったく説明が下手ですみません… Const 入力範囲 = "B2:D10" Const 出力範囲 = "E2" のところを変えたら良いのかと思って、出力範囲を"A2:A100"の様にしたら、全部が同じ日付になってしまって、どうしたら良いか判りません。 申し訳ないですけど、もう少し教えてもらえませんか。 よろしくお願いします。

  • imparfait
  • ベストアンサー率43% (52/120)
回答No.1

「このセル」や「こっちのセル」という表現では、何を指しているのか分かりませんが、あるひとつのセルで入力した日付を他のセルに自動的に入れるなら、単に次のようにすれば済みます。 例えば、A1に入力した日付を、自動的にB1に表示させるには、 B1に =IF(A1="","",A1) と入力してください。

LiLi39
質問者

お礼

ありがとうございます。 それも試したのですが、ちょっと違ったようでした。 ほんと、言葉足らずですみません。

関連するQ&A