Excel VBA 逆引き集 | セル範囲の移動

Excel VBA
スポンサーリンク

セル範囲の移動

「コピーではなく“移動”したい」「値も書式もそのまま別の場所へ」「値だけ移動」「見た目も含めて移動」などを初心者向けに整理します。基本は Cut → PasteRange.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 を併用し、範囲を絞ると高速化。
タイトルとURLをコピーしました