Excelマクロ・VBA セル(行・列)の削除

Excelのマクロ・VBAによるセル(行・列)の削除方法を紹介します。

解説

Range.ValueプロパティまたはCells.Valueプロパティに対して

Deleteメソッドを利用して操作します。

セルを削除

セルに対して削除を行う場合はDeleteメソッドに

削除後のシフト方向(詰める方向)を指定します。

指定説明
xlShiftToLeft左方向にシフト
xlShiftUp上方向にシフト

対象をセルアドレスで指定(Range)

単独のセル

Range(“セルアドレス")に対してDeleteメソッドを使用します。

Range("セルアドレス").Delete(削除後のシフト方向)

Worksheets(“シート名")を利用すると対象シートも指定します。

削除後のシフト方向を省略すると上方向にシフトします。

シートを指定しない場合はアクティブシートのセルが対象になります。

Worksheets(インデックス) の場合は最も左のシートを1とした連番を指定します。

以下コード例です。(赤字は適宜変更

' アクティブシートのA1セルを削除して左にシフト
Range("A1").Delete(xlShiftToLeft)
' Sheet1のB1セルを削除して上にシフト
Worksheets("Sheet1").Range("B1").Delete(xlShiftUp)
' 最も左にあるシートのA2セルを削除して左にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Range("A2").Delete(xlShiftToLeft)
セル範囲

Rangeでセル範囲を指定してDeleteメソッドを利用すると範囲に対して削除を行います。

Range("セル範囲のアドレス").Delete(削除後のシフト方向)

省略していますが、 Worksheets指定も可能です。

削除後のシフト方向を省略すると

範囲が縦長の場合は左方向、横長の場合は上方向へシフトされます。

以下コード例です。(赤字は適宜変更

' A1~C3の値を削除して左にシフト
Range("A1:C3").Delete(xlShiftToLeft)
' A1~C3の値を削除して上にシフト
Range("A1", "C3").Delete(xlShiftUp)

対象を行数・列数で指定(Cells)

Cells(行数,列数)に対してDeleteメソッドを使用します。

Cells(行数,列数).Delete(削除後のシフト方向)

削除後のシフト方向を省略すると上方向にシフトします。

Worksheets(“シート名")を利用すると対象シートも指定します。

シートを指定しない場合はアクティブシートのセルが対象になります。

Worksheets(インデックス) の場合は最も左のシートを1とした連番を指定します。

以下コード例です。(赤字は適宜変更

' アクティブシートのA1セルを削除して左にシフト
Cells(1,1).Delete(xlShiftToLeft)
' Sheet1のB1セルを削除して上にシフト
Worksheets("Sheet1").Cells(1,2).Delete(xlShiftUp)
' 最も左にあるシートのA2セルを削除して左にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Cells(2,1).Delete(xlShiftToLeft)

行を削除

単独行

Rowsに対してDeleteメソッドを使用します。

行の場合、削除後のシフト方向は指定しません。(常に上方向にシフト)

Rows(行数).Delete

または Range(“セルアドレス")EntireRowに対してDeleteメソッドを使用します。

このセルアドレスは行が合っていれば、どの列でも構いません。

Range("セルアドレス").EntireRow.Delete 

RowsとRangeはどちらを利用しても構いませんが、

行は常に数値で指定するためRowsの方が扱いやすいでしょう。

なおWorksheets(“シート名")を利用すると対象シートも指定します。

シートを指定しない場合はアクティブシートのセルが対象になります。

Worksheets(インデックス) の場合は最も左のシートを1とした連番を指定します。

' アクティブシートの1行目を削除して上にシフト
Rows(1).Delete
' アクティブシートの1行目を削除して上にシフト
Range("A1").EntireRow.Delete
' Sheet1の1行目を削除して上にシフト
Worksheets("Sheet1").Rows(1).Delete
' 最も左にあるシートの1行目を削除して上にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Range("A1").EntireRow.Delete

複数行

Rangeで複数行を指定してDeleteメソッドを利用すると複数行に対して削除を行います。

Range("セル範囲のアドレス").Delete

以下コード例です。(赤字は適宜変更

' アクティブシートの1~3行目を削除して上にシフト
Range("1:3").Delete
' Sheet1の1~3行目を削除して上にシフト
Worksheets("Sheet1").Range("1:3").Delete
' 最も左にあるシートの1~3行目を削除して上にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Range("1:3").Delete

列を削除

単独列

Columnsに対してDeleteメソッドを使用します。

列の場合、削除後のシフト方向は指定しません。(常に左方向にシフト)

Columns(列数).Delete

またはRange(“セルアドレス").EntireColumnに対してDeleteメソッドを使用します。

このセルアドレスは列が合っていれば、どの行でも構いません。

Range("セルアドレス").EntireColumn.Delete 

RowsとRangeはどちらを利用しても構いません。

Columnsは数値で指定、Rangeは文字列で指定するため、

その時々で都合の良い方を選択しましょう。

なおWorksheets(“シート名")を利用すると対象シートも指定します。

シートを指定しない場合はアクティブシートのセルが対象になります。

Worksheets(インデックス) の場合は最も左のシートを1とした連番を指定します。

' アクティブシートの1列目を削除して左にシフト
Columns(1).Delete
' アクティブシートのA列を削除して左にシフト
Range("A1").EntireColumn.Delete
' Sheet1の1列目を削除して左にシフト
Worksheets("Sheet1").Columns(1).Delete
' 最も左にあるシートの1列目を削除して左にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Range("A1").EntireColumn.Delete

複数列

Rangeで複数列を指定してDeleteメソッドを利用すると複数列に対して削除を行います。

Range("セル範囲のアドレス").Delete

Columnsを併用すると数値で指定可能です。

Range(Columns(列数), Columns(列数)).Delete

以下コード例です。(赤字は適宜変更

' アクティブシートのA~C列を削除して左にシフト
Range("A:C").Delete
' Sheet1のA~C列を削除して左にシフト
Worksheets("Sheet1").Range(Columns(1), Columns(3)).Delete
' 最も左にあるシートのA~Cを削除して左にシフト。1つ数字を増やすと1つ右のシート
Worksheets(1).Range("A:C").Delete

Office スクリプト(オンライン版)の場合

以下のコードで行います。(赤字は適宜変更)

// TestシートのA1セルを削除して上に移動
workbook.getWorksheet("Test").getRange("A1").delete(ExcelScript.DeleteShiftDirection.up);
// TestシートのA1セルを削除して左に移動
workbook.getWorksheet("Test").getRange("A1").delete(ExcelScript.DeleteShiftDirection.left)
// Testシートの1行目を削除して上に移動
workbook.getWorksheet("Test").getRange("1:1").delete(ExcelScript.DeleteShiftDirection.up);
// TestシートのA列を削除して左に移動
workbook.getWorksheet("Test").getRange("A:A").delete(ExcelScript.DeleteShiftDirection.left);

詳細はこちら。

関連記事

マクロ・VBAの学習・活用方法の記事一覧