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);
詳細はこちら。