dポイントプレゼントキャンペーン実施中!

いつもお世話になります。
今回ご教授いただきたいことは、あるセルに(仮にA1とします)に何がしかの入力がなされた際に、別のセル(C1)に処理を行った「その日」を表示させたいのですが、そんなことがたとえば、関数を使ってできますでしょうか。
TODAY関数ですと、永遠に「今日」を表示してしまいますし、、、。

よろしくお願い致します。

A 回答 (3件)

こんにちは。



あえて、こういうイベントドリブン型でなくてもできるはずだと思いますが、一般的な方法です。
除外項目は、良くみて、必要なければ省いてください。
現在の場合は、貼り付けにする場合は、1セルのみです。複数セルにするには、コードを換えなくてはなりません。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub 'A列以外は不可
If Target.Count > 1 Then Exit Sub 'セルが複数の場合は不可
If Target.HasFormula Then Exit Sub '数式は不可
If Target.Value = "" Then Exit Sub '削除する場合は不可
If Target.Offset(, 2).Value <> "" Then Exit Sub 'C列に文字がある場合は不可

Application.EnableEvents = False
  Target.Offset(, 2).Value = Date
Application.EnableEvents = True

End Sub

この回答への補足

ありがとうございます。早速試してみます!

補足日時:2007/11/09 16:07
    • good
    • 0

関数のメリットは、いつも、引数が変更されれば、再計算するという仕組みにあります。


ですから1回限りセルの値を決めて、2回目から働かない(計算や処理をしない、ができません。
ですからエクセルの現在の関数ではできません。
ーー
VBAで実行した日の日付をセットするしかないでしょう。
場合によれば、セルの変更イベントではなくて、ブックを閉じるとき、日付をセットするロジックで、できる場合もあるかもしれない。
ーー
私は CTRL+; をお勧めします

この回答への補足

ありがとうございます。なんでも関数で、というのは違うのですね。

補足日時:2007/11/09 16:52
    • good
    • 0

手動で


Ctrl + ;
Ctrl + :
をすれば、現在の日時を入力できますが、
自動でとなると、VBAになるとおもいます。

シートモジュールに記述します。

Private Sub Worksheet_Change(ByVal Target As Range)

'A1セル以外が変更されたら何もしない
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

Range("C1").Value = Now

End Sub

この回答への補足

そうですかぁ、やっぱりVBAなのですね。
ありがとうございます。
ところで、それをA2・A3・A4・・・・とずっと続ける場合はVBAの記述はどのようにしたらよろしいのでしょうか。。。
初歩的な質問で申し訳ございません。

補足日時:2007/11/09 13:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!