セル範囲の移動
「コピーではなく“移動”したい」「値も書式もそのまま別の場所へ」「値だけ移動」「見た目も含めて移動」などを初心者向けに整理します。基本は Cut → Paste か Range.Cut Destination を使います。
基本:セル範囲を移動(切り取り→貼り付け)
Sub MoveRange_Basic()
'B2:D5 を F2 に移動(切り取り→貼り付け)
Range("B2:D5").Cut Destination:=Range("F2")
End Sub
VB- ポイント:
- Copy は「複製」、Cut は「移動」。
- Destination に貼り付け先の左上セルを指定。
- 書式・背景色・数式・コメントなども含めて移動されます。
値だけ移動(書式は残す)
Sub MoveValuesOnly()
Dim src As Range, dst As Range
Set src = Range("B2:D5")
Set dst = Range("F2").Resize(src.Rows.Count, src.Columns.Count)
dst.Value = src.Value '値だけ転記
src.ClearContents '元の値を消す(書式は残す)
End Sub
VB- ポイント:
- 値だけを移動したい場合は「転記+元を消す」。
- ClearContents は値だけ消すので書式は残ります。
数式だけ移動(参照を維持)
Sub MoveFormulasOnly()
Dim src As Range, dst As Range
Set src = Range("B2:D5")
Set dst = Range("F2").Resize(src.Rows.Count, src.Columns.Count)
dst.Formula = src.Formula '数式だけ移動
src.ClearContents '元の数式を消す
End Sub
VB- ポイント:
- Formula プロパティで数式だけを扱える。
- 値は計算結果に応じて自動で反映されます。
列や行を丸ごと移動
Sub MoveColumnRow()
'A列をE列へ移動
Columns("A").Cut Destination:=Columns("E")
'3行目を10行目へ移動
Rows(3).Cut Destination:=Rows(10)
End Sub
VB- ポイント: 列や行単位でも Cut Destination が使えます。
フィルタ後の可視セルだけ移動
Sub MoveVisibleCells()
With Range("B2:D20").SpecialCells(xlCellTypeVisible)
.Cut Destination:=Range("F2")
End With
End Sub
VB- ポイント: フィルタで非表示になった行を除いて移動できます。
動的最終行を使って表を移動
Sub MoveTableDynamic()
Dim last As Long
last = Cells(Rows.Count, "B").End(xlUp).Row
Range("B2:D" & last).Cut Destination:=Range("F2")
End Sub
VB- ポイント: 毎回行数が変わる表でも、最終行を取得して範囲を動的に指定できます。
例題で練習
例題1:売上表の「金額列」を別列へ移動
Sub Example_MoveAmountColumn()
Dim last As Long
last = Cells(Rows.Count, "E").End(xlUp).Row
Range("E2:E" & last).Cut Destination:=Range("H2")
End Sub
VB例題2:選択範囲の値だけ移動(書式は残す)
Sub Example_MoveSelectionValues()
If TypeName(Selection) = "Range" Then
Dim dst As Range
Set dst = Range("Z1").Resize(Selection.Rows.Count, Selection.Columns.Count)
dst.Value = Selection.Value
Selection.ClearContents
End If
End Sub
VB例題3:テンプレート表を別シートへ移動
Sub Example_MoveToAnotherSheet()
Worksheets("Sheet1").Range("A1:E10").Cut _
Destination:=Worksheets("Sheet2").Range("A1")
End Sub
VB実務の落とし穴と対策
- コピーと移動の混同: Copy は複製、Cut は移動。目的に応じて使い分け。
- 値だけ移動したい: 配列転記+ClearContents を組み合わせる。
- 結合セルの崩れ: 結合セルは移動先で崩れることがある。見出し結合は最小限に。
- 参照ズレ: 数式を移動すると参照が相対的に変わる。必要なら絶対参照に修正。
- 大量範囲で遅い: Application.ScreenUpdating=False を併用し、範囲を絞ると高速化。
