という内容の質問を先日させていただきました。
http://q.hatena.ne.jp/1541915567
(文中に行100うんぬんのくだりがありますがそれは記載ミスです。)
以下コメントに続きます。
マクロを少し変更すれば実現できますよ
1) 値を保存する変数として prev を新たに用意.
2) Worksheet_SelectionChange を使って,セルを選んだ瞬間に,セルの値を prev に保存
3) Worksheet_Change では値が prev と異なっていた場合だけ,時刻を更新
という感じです.
実際のマクロはこうなります
Dim prev Private Sub Worksheet_SelectionChange(ByVal Target As Range) prev = Target.Value End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 54 Then If prev <> Target.Value Then Cells(Target.Row, "BB") = Now End If End If End Sub
そしていただいた回答を元に以下のコードをワークシートのコードの所に書きました。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 54 Then
Cells(Target.Row, "BB") = Now
End If
End Sub
1点、理想と違う動きがあるのでそれを何とかしたいと思っています。
入力の終わった行の中の、あるセルの内容を、新しい行に入力する文字列のベースとするためにコピーをする際に、更新日時が更新されないようにしたいです。
例えば目的のセルを選択しコピーするだけだと更新日時は更新されないのですが、コピーしてメモ帳に張り付けると
改行を無視した、そして文頭、文末に"が入った形式になってしまい使いにくいです。
なのでセルをダブルクリックし数式バーに表示された内容をコピーしメモ帳に張り付けると上記問題はないのですが、
今度は更新日時が更新されてしまうという問題が起こってしまいます。
(その際はダブルクリックをしただけでありセル内の文字は一切変更ありません。)
エクセルバージョンは2016です。
良い方法をご存知の方いらっしゃいましたらどうぞよろしくお願いいたします。
何か対処法と言うのとは方向性が異なるかと思いますが、考え方を述べます。
内容を変更しないなら、『編集モード』はESCキーで解除することです。
編集モードにした後の操作なのですが、
基本的に、
エンターキーを押してしまうと、エクセルは、
"セル内容を更新した"
と認識します。
⇒それで「Worksheet_Change」のイベントが発生します。
そして更新日時が更新されることになります。
それで、編集モードにしても参照のためだけなら、編集モードをキャンセルすれば良いです。
エンターキーは押すことはせず、ESCキーを押して編集モードを解除するのです。
⇒すると、更新モードはキャンセルすることで、「Worksheet_Change」のイベントは発生しません。
そして更新日時が更新されることにはなりません。
(以下はその他考察です)
何でもないときに、例えば誤ってキー入力してしまうと、その時に選択されていたセルに文字が入ったりしますね。
自動的に更新モードに入って、入力された文字を受け付け始める訳ですね。
それをエンターキーを押してしまうとそのまま確定してしまうけど、これでは困る訳で、
そんなときは、ESCキーでキャンセルしますね。
それと同じことを言っています。
またよく見ていてハラハラすることの一例ですが、
エクスプローラでフォルダやファイルを選択するのに名前の上でクリックし、さらにクリックしてしまうと、
あるいはダブルクリックで実行する、なんて時に、ゆっくりクリックのためシングルクリック2回と認識されて、
名称を変更するモードになってしまうことがありますね。
そこで何か文字を入力したりすると名称が変わってしまうのです。
このようなときに過ちを避けるためには、確定のためのエンターキーは押さないこと、
ESCキーで編集モードを解除することです。
セルの更新もまさにそれと同じです。
VBAの中で実際の内容変更があったのかを判定して処理する方法も無いではないですが、完全には難しいと思います。
シート全体の更新前内容をミラーで維持するようなことになるのかなと・・・
そんなことよりは、基本的な操作として、無用な更新をしない、更新したと認識されないためには、
『キッチリとESCキーで解除すること』です。
これが同じような局面での変な更新を避ける安全面からも、基本的な操作と認識しております。
どうぞご確認をお願いいたします。
数式バーの上をクリックしただけでもそのときのセルに対して更新モードになってしまいます。
こときにもESCキーで解除せずにエンターキーを押すとそのときのセルを更新したとして扱われてしまいます。
さらにこのときにエンターキーを押すのではないとしても、例えば他のセルを選択クリックすること等によってもESCキーで解除しない限り、
更新したとして扱われてしまいます。
ですから、それを避けるためと無用な変更を避けるために、必ずESCキーで解除する習慣にすることです。
DELキーを押すことでも更新されたとして扱われますので、通常は影響ないですが、今回のような場合は要注意です。
ヌルのセルを選択中にDELキーを押した場合も同様ですから。
このように、内容を変更するモードになった場合、変更しないならESCキーで抜けることです。
(しつこかったですが、ごめんなさい)
セルをダブルクリックすると更新日時が更新されると書きましたが、
ダブルクリックをしなくとも、シングルクリックでセルを選択し、数式バー内をクリックした場合も更新日時が更新されます。