こんにちは、Office 開発サポート チームの中村です。
今回の投稿では、Excel のコピー動作の変更に関して記載します。
これまで、Excel ではセル範囲をコピーした後、他のセルに値を入力したり、セルの挿入や削除などを行うと、コピー範囲が解除されて貼り付けられなくなっていました。
この動作について、クイック実行版の Excel 2016 バージョン 1705 (16.0.8067.xxxx) で、Excel のセル範囲をコピーした後、他の操作を行っても、コピー範囲が解除されないように変更されました。このバージョンは、Current Channel 向けに 2017 年 5 月に提供されたものとなり、他のチャネルへは順次提供されます。この新しい動作については、以下の公開情報で確認できます。
タイトル : Office 365 の新機能
アドレス : https://support.office.com/ja-JP/article/95c8d81d-08ba-42c1-914f-bca4603e1426
該当箇所 : “2017 年 5 月の更新プログラム” 内の “コピーを保持する”
例)
- 以下のように A1 セルをコピーします。
- B1 セルに文字を入力します。
- Enter キーを押下して、入力を完了すると、A1 セルのコピーが維持されたままとなっており、そのまま C1 セルに貼り付けられます。
これに伴って、画面操作では、行などの挿入を行うときに [コピーしたセルの挿入] と [挿入] を選択できるようになっています。
この動作変更は、画面操作を行うユーザーにとっては都度コピーを行うことなくシートを編集できるため、利便性が向上します。ただ一方で、プログラムの実装によっては、以前と異なる動作となる場合がありますのでご注意ください。
プログラムで動作が変更される場合
以下のコードでは、A1 ~ A2 セルに値を入力し、これをコピーして B1 ~ B2 セルに貼り付けた後、6 行目に行を挿入しています。
<サンプル コード>
Sub Sample()
Range("A1").Value = "A1"
Range("A2").Value = "A2"
Range("A1:A2").Copy
Range("B1:B2").Select
ActiveSheet.Paste
Rows("6:6").Select
Rows("6:6").Insert
End Sub
これまでの動作
空白の行が 1 行挿入されます。
バージョン 1607 からの動作
2 行挿入され、行に A1 / A2 セルの値が繰り返し入力されます。
従来の動作では、Paste の実行によって、次の行の挿入時にはコピー範囲が保持されていなかったため、明示的にコピー モードのリセットを行わなくても空白行が挿入されていました。
バージョン 1607 以降では、Paste 後もコピー範囲が保持されるため、明示的にコピー モードを解除せずに行を挿入すると、このような動作となります。
回避方法
以前の動作と同等の動作としたい場合は、Application.CutCopyMode プロパティを使用してコピー範囲をリセットしてから Insert 関数を呼び出します。
タイトル : Application.CutCopyMode プロパティ (Excel)
アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff839532(v=office.15).aspx
<サンプル コード>
Sub Sample()
Range("A1").Value = "A1"
Range("A2").Value = "A2"
Range("A1:A2").Copy
Range("B1:B2").Select
ActiveSheet.Paste
Application.CutCopyMode = False '回避コード
Rows("6:6").Select
Rows("6:6").Insert
End Sub
今回の投稿は以上です。
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。