TL;DR —
Range.Cutはセルを切り取りモードでクリップボードに持ち上げます。それを置くとき、正反対 のことをする方法がちょうど 二通り あります。rng.Cut Destination:=dest(貼り付け)はセルをdestの上に落として 上書き し、rng.Cutのあとdest.Insertはすき間を空けてセルを脇へ ずら す ので何も失われません。Cutはまた 移動 です — 元を空にします — 一方Copyは 複製 します。 終わったらApplication.CutCopyMode = Falseでクリップボードをクリアしましょう。
Sub CutBasics()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Data")
ws.Range("A2:D2").Cut ' 行のセルを持ち上げる(回る点線)
ws.Range("A10").Insert Shift:=xlDown ' 切り取ったセルを INSERT する - ずらす、上書きしない
Application.CutCopyMode = False ' クリップボードの状態を片づける
End Sub
Cut は、行の移動 と 列の移動 の下にある動詞で
す。Cut はセルを持ち上げるだけ。置き方が二通りあり、正反対の結果になります。 それがクリップボードに
何を載せ、それを取り出す二つの方法を理解すれば、その上に築かれるすべての移動は予測どおりに動きます。
この記事で学べること
CutとCopyの違い — 移動は元を空にし、コピーは元をその場に残す- 切り取りの二人の消費者 —
Destination:=/ 貼り付けは 上書き し、Insertは ずらす - なぜ
Application.CutCopyMode = Falseが大事なのか、そして回る点線とは本当は何なのか - なぜ
Cutは複数エリアの(Union)範囲を受け付けないのに、Copyはときに許すのか - 切り取ったセルを指す数式が、それを壊す削除とは違って、なぜセルに 追従する のか
Cut は移動、Copy は複製
一語の違いは、終わったときに元がどう見えるかです。Copy は元をあった場所にそのまま残します — 今や二つ
のコピーがあります。Cut はセルがどこかに着地すると元を取り除きます — 手元には一つ、新しい場所にありま
す。
ws.Range("A2:D2").Copy ws.Range("A20") ' A2:D2 は残り、A20 に複製ができる
ws.Range("A2:D2").Cut ws.Range("A20") ' A2:D2 は空になり、A20 に元のものが入る
つまり Cut は 移動 のため、Copy は 複製 のためのものです。移動しようとして Copy に手を伸ばす
— コピーしてから元を手で削除する — のは、やりかけの移動を生む古典的な原因です。コピーは着地したのに削
除を忘れる、あるいは間違った範囲を削除してしまう、ということが起こります。目標が移動なら、切り取りましょ
う。
切り取ったものを置く二つの方法
セルが切り取りモードでクリップボードに載ると、それをどう置くかがデータが生き残るかどうかを決めます。次 の二行は似て見えて、正反対のことをします。
ws.Range("A2:D2").Cut Destination:=ws.Range("A10") ' PASTE - A10:D10 に落ちて上書きする
ws.Range("A2:D2").Cut
ws.Range("A10").Insert Shift:=xlDown ' INSERT - A10 にすき間を空けて下へずらす
Cut Destination:=(および手動の .Cut のあと .Paste)は 貼り付け です。切り取ったセルは移動先
の 上に 落ち、そこにあったものを上書きします。.Cut のあとの .Insert は 切り取ったセルの挿入 で
す。移動先とその先にあるすべてが場所を空けるために脇へずれ、何も上書きされません。対象が空で、セルをちょ
うどそこに落としたいなら貼り付けを、セルを他のものの 間に 差し込むなら挿入を選びます — それが移動とい
うものです。
CutCopyMode と回る点線
移動先を指定しない Range.Cut(や Copy)のあと、Excel は特別な状態に置かれます — 元のセルに這うよう
な破線の境界、「回る点線(marching ants)」が付き、Excel は貼り付けか挿入を待っています。その状態が
Application.CutCopyMode で、放っておくとだらしがありません。ユーザーの次の操作が思わぬ貼り付けを引き
起こしたり、Esc を押したりセルを編集したりすると、マクロが想定していなかった形でキャンセルされたりしま
す。
ws.Range("A2:D2").Cut
ws.Range("A10").Insert Shift:=xlDown
Application.CutCopyMode = False ' 回る点線をキャンセルし、クリップボードを解放する
Cut Destination:= と .Insert は操作を完了してモードをクリアしてくれるので、そこでの余分な一行は念の
ための保険です。ですが、.Cut や .Copy をしてから貼り付ける前に別の作業をするときは、いつでも
Application.CutCopyMode = False で締めくくり、Excel を切り取りの途中で放置しないようにしましょう。
Cut は複数エリアの範囲を受け付けない
Cut が働くのは 一つ の連続したブロックに対してだけです。複数エリアの範囲 — Union で結合したセル
や、Range("A2:D2, A8:D8") のような複数選択 — を渡すと、実行時エラーになります。離れた二つのブロックを
落とす、筋の通った単一の場所がないからです。
Union(ws.Range("A2:D2"), ws.Range("A8:D8")).Cut ' 実行時エラー - Cut は一つのブロックを必要とする
Copy は、形の揃った複数エリアの範囲に対してはときに寛容で、これも切り取りとコピーが交換できない理由の
一つです。散らばった複数の行を移動するには、一度に全部切り取ろうとするのではなく、一ブロックずつ切り取っ
て挿入します(積み重なっているときは下から上へ) — 行の移動 を参照してくださ
い。
Cut は参照を運ぶ、削除は壊す
切り取りを 安全な 移動にしている性質がこれです。セルを切り取ると、Excel はそれを指すすべての数式を書
き換え、参照がセルの新しい住所に追従するようにします。=Data!B2 は、B2 を B40 に切り取ったあとも同
じ値を読み続けます。これは、それらのセルを 削除する ときとちょうど正反対で
す。削除された範囲を指していた数式は =#REF! に潰れ、壊れたままになります。
理由は、それぞれの動詞が意味することにあります。切り取りはデータを 引っ越しさせます — データはまだ存
在するので、参照には指すべきものがまだあり、Excel はそれを更新します。削除はデータを 壊します — 指す
べきものが何も残らないので、参照は壊れます。同じ数字を新しい場所に置いて、すべての数式を生かしておきた
いなら Cut が道具です。数字を消したいなら、#REF! が出るものと覚悟して片づけましょう。
ExcelMaster の活用
Cut は、どれも静かに失敗する三つの分かれ道を隠しています — 移動か複製か(Cut か Copy か)、上書きかず
らしか(貼り付けか挿入か)、そして完了か切り取りの途中か(CutCopyMode) — さらに、あからさまにエラー
になる複数エリアの範囲もあります。選択を誤ると、消えた元の行、上書きされた移動先、あるいは切り取りモー
ドのまま止まったブックが手に入ります。
ExcelMaster には、意図をそのまま伝えら
れます — 「これらのセルを、何も上書きせずに合計の下へ移動して」 — すると、コピーではなく切り取り、貼り
付けではなく 挿入 し、操作を一つの連続した範囲ずつに区切って行い、終わったら CutCopyMode をクリアし
ます。ブックとコードはあなたの手元に残ります。
よくある質問
VBA の Range.Cut は何をしますか?
Range.Cut は、範囲のセルを切り取りモードでクリップボードに載せ、回る点線の境界を表示します。それ単体
ではまだ何も移動しません — 移動を完了するのは、貼り付け(Cut Destination:=、対象を上書きする)か、移
動先で .Insert を呼ぶこと(セルを脇へずらして保つ)です。セルが着地すると、元は空になります。
VBA で Cut と Copy はどう違いますか?
Cut は移動です — セルが着地したあと元が空になるので、手元には新しい場所に一つだけ残ります。Copy は
複製です — 元は残り、移動先に二つ目のコピーができます。移動には Cut、複製には Copy を使いましょう。
コピーしてから削除する方法を移動として使ってはいけません — やりかけになりやすいからです。
なぜ Application.CutCopyMode = False を設定すべきなのですか?
切り取りやコピーのあとの、回る点線のクリップボード状態をキャンセルするためです。付けたままにすると、次
のキー操作から思わぬ貼り付けを招き、Excel を操作の途中で待たせてしまいます。Cut Destination:= と
.Insert はそれを自動でクリアしますが、.Cut や .Copy をして貼り付ける前に別の作業をするときは、自
分で Application.CutCopyMode = False を設定しましょう。
なぜ Union 範囲を切り取ると VBA がエラーを投げるのですか?
Cut が扱えるのは一つの連続したブロックだけだからです。Union や複数選択は離れた複数のブロックで、そ
れらを落とす単一の場所がないので、Cut は実行時エラーを起こします。代わりに一ブロックずつ切り取って挿
入しましょう。(Copy は、形の揃った複数エリアの範囲に対してはときに寛容です。)
セルを切り取ると数式の参照は壊れますか?
いいえ — 追従します。Excel は切り取ったセルを参照する数式を書き換えて、セルの新しい場所を指すようにする
ので、同じデータを読み続けます。これがセルを削除するときとの違いです。削除は参照に指すべきものを残さず、
#REF! に潰します。
検証環境
動作確認: Excel 365 (Windows 11), VBA 7.1 — 最終確認 2026-09-17.
関連ガイド: VBA 行の移動 · VBA 列の移動 · VBA コピー&貼り付け · VBA 形式を選択して貼り付け · VBA 行の削除
