「
切り取り」の後「
貼り付け」を行う場合、「
貼り付け」
先に在ったデータが消去されます。
セル内の文字や数値が消えるだけなら良いのですが、そのセルが他のセルから
参照されたいる場合、
「切り取り」の後「貼り付け」を行った瞬間、参照先のセルに
#REF(参照エラー)が発生してしまいます。
例:再現実験
C4のデータを判定して評価を算出する式をC5に設定しています。
(成績が「A」であれば「〇」、以外は空白)
同様に、D4の評価式をD5に設定
ここで、セルC4を「
切り取り」、セルD4に「
貼り付け」ます。
この瞬間に、セル
C5の式は、セルD4を参照するように変更されます。
これは問題ありません。元データが移動したのだから、それを参照しているセルの式も変化します。
ところが、元々
D4を参照している式(
D5)がある場合は問題が生じます。
セルD4にセルC4が上書きされたため、
D4が
消滅した状態になっています。
これにより、
D4を参照していた
D5では参照不可となり
#REFが発生。
(どのような論理でこのような動作をするのか、いまいち不明)
「貼り付け」は「シート保護」を行っても防止できません。
(「セル選択」自体を禁止すれば「貼り付け」は出来ませんが・・・)
セルの選択(
Worksheet_SelectionChange)イベント発生時に、
コピー状態が「
切り取りモード」(Application.CutCopyMode = xlCut)であれば、強制的に
コピー状態を
解除(Application.CutCopyMode = False)してしまいます。
これにより、「
切り取り」操作操作自体が
無かったことになり、「
貼り付け」が出来なくなります。
下図で「貼り付け」が灰色になり、選択できなくなっています。
「コピー」後の「貼り付け」は可。