🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel VBA で切り取る(Cut)— Range.Cut、Cut と Copy、切り取ったものを置く二つの方法

|

Excel VBA で切り取る(Cut)— Range.Cut、Cut と Copy、切り取ったものを置く二つの方法

TL;DRRange.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 はセルを持ち上げるだけ。置き方が二通りあり、正反対の結果になります。 それがクリップボードに 何を載せ、それを取り出す二つの方法を理解すれば、その上に築かれるすべての移動は予測どおりに動きます。

この記事で学べること

  • CutCopy の違い — 移動は元を空にし、コピーは元をその場に残す
  • 切り取りの二人の消費者 — 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 は、B2B40 に切り取ったあとも同 じ値を読み続けます。これは、それらのセルを 削除する ときとちょうど正反対で す。削除された範囲を指していた数式は =#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 行の削除