対象:Office365 Excel バージョン 1705 (ビルド 8201.xxxx) 以降
2017年5月の更新で「コピーを保持する機能」が追加され、セルをコピーしたあとでセルの選択や編集をしてもコピーした情報を貼り付けられるようになった。
行挿入も同様に、行のコピー後に連続で「コピーしたセルの挿入」ができるようになった。
個人的に大変重宝している。
しかし、この機能によりRange.Insertの動きが変わってしまった。
詳細
Sub sample()
Rows("1:1").Copy
Rows("4:4").Insert Shift:=xlDown '1行目のコピーが行挿入される
Rows("4:4").Insert Shift:=xlDown '空行が挿入される
End Sub
これまでは1度でもInsertすればコピー情報はクリアされていた。
ところがコピーの保持機能があると2回目以降のInsertでもコピーが行挿入されてしまう。
Sub sample()
Rows("1:1").Copy
Rows("4:4").Insert Shift:=xlDown '1行目のコピーが行挿入される
Rows("4:4").Insert Shift:=xlDown '1行目のコピーが行挿入される
End Sub
コピー状態(セルが緑色の点線で光っている状態)を解除しないと空行のコピーができなくなっている。
同様に、例えば下記コードはコピー元と挿入先の形が違うため、コピー状態を意図的に解除しないと1004エラー「コピー領域と貼り付け領域のサイズが違うため、これをここに貼り付けることができません。」となる。
Sub sample()
Columns("A:A").Copy
Columns("B:B").Insert Shift:=xlToRight
Rows("4:4").Insert Shift:=xlDown
End Sub
個人的にこれまであまり意識していないところであったため、Insertしているところは見直していく所存。
回避
Insert前にコピー状態を解除すればよい。
Application.CutCopyMode = False
参考
2018/9/20 追記
この仕様変更が不要だったらしく9/17に機能を一旦取り下げたようだ。
https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/20324245-may-2017-update-which-keeps-the-copied-item-active