VBA セルを移動する (Range.Cut)

はじめに

Excel VBA マクロでセルを移動する方法を紹介します。

Range("B1").Cut または Cells(1, 2).Cut メソッドから、セル「B1」を移動できます。

Paste メソッドから、クリップボードから貼り付けできます。

セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • セルを移動する
    • セルの範囲を移動する
    • 別シートのセルを移動する

セルを移動する

Range の引数にセル名を指定すると、そのセルを移動できます。

セル「A1」を「B2」へ移動するには Range("A1").Cut(Range("B2")) を入力します。

Call Range("A1").Cut(Range("B2"))
1

Cells の引数にセルの行と列の番号を指定すると、そのセルを移動できます。

行「2」、列「A」を移動するには Cells(2, 1).Cut(Range("C1")) を入力します。

Call Cells(1, 1).Cut(Range("C1")) ' A1 を移動
Call Cells(2, 1).Cut(Range("C1")) ' A2 を移動
Call Cells(1, 2).Cut(Range("C1")) ' B1 を移動
Call Cells(2, 2).Cut(Range("C1")) ' B2 を移動

クリップボードに切り取ってから貼り付け

Cut の引数を指定しないと、クリップボードに切り取ってから貼り付けできます。

セル「A1」を切り取るには Range("A1").Cut を入力します。

セル「B1」に貼り付けるには Paste(Range("B1")) を入力します。またはセルを選択してそのセルに貼り付けできます。

Range("A1").Cut         ' クリップボードに切り取り
Call Paste(Range("B1")) ' B1 に貼り付け

Range("A1").Cut         ' クリップボードに切り取り
Range("B1").Select      ' B1 を選択
Paste                   ' 選択している B1 に貼り付け
セルを選択するには「セルを選択する」をご覧ください。

セルの範囲を移動する

セルの範囲「A1」~「B2」を移動するには Range("A1:B2").Cut または Range("A1", "B2").Cut を入力します。

Call Range("A1:B2").Cut(Range("C1"))
Call Range("A1", "B2").Cut(Range("C1"))
' A1 → C1 に移動
' A2 → C2 に移動
' B1 → D1 に移動
' B2 → D2 に移動
3

セルの範囲「A1」~「B2」を「C1」へ移動すると、セルの範囲「C1」~「D2」に移動されます。これは Excel の操作と同じです。

セル「A1」「B2」「C3」のように離れたセルをまとめて移動できません。

Call Range("A1, B2, C3").Cut(Range("D1")) ' エラー

クリップボードに切り取ってから貼り付け

Range("A1:B2").Cut ' A1 ~ B2 を切り取り
Call Paste(Range("C1"))
' A1 → C1 に移動
' A2 → C2 に移動
' B1 → D1 に移動
' B2 → D2 に移動

Range("A1:B2").Cut ' A1 ~ B2 を切り取り
Range("C1").Select ' C1 を選択
Paste
' A1 → C1 に移動
' A2 → C2 に移動
' B1 → D1 に移動
' B2 → D2 に移動

別シートのセルを移動する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 のセル「A1」を移動
Call Worksheets("Sheet1").Range("A1").Cut(Range("B2"))
Call Worksheets(1).Range("A1").Cut(Range("B2"))

' Sheet2 のセル「A1」を移動
Call Worksheets("Sheet2").Range("A1").Cut(Range("B2"))
Call Worksheets(2).Range("A1").Cut(Range("B2"))

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"