Delete / Insert オブジェクトRange メソッド(動作)

Range

はじめに

Excel VBA(Visual Basic for Applications)を用いたデータの自動処理において、セルや行・列の追加・削除操作は基本かつ頻繁に使用される処理です。これを実現するメソッドが以下の2つです。

  • Range.Delete:指定したセル範囲を削除し、周囲のセルを詰める
  • Range.Insert:指定したセル範囲にスペースを挿入し、周囲のセルをずらす

この2つは見た目も影響する動作のため、正確な理解と使い分けが非常に重要です。


1. Range.Delete メソッド

● 概要

Delete は、セル・行・列を削除し、その周囲のセルを上や左に詰める動作を行います。オプションを指定することで、「上に詰める」「左に詰める」を選ぶことができます。


● 基本構文

Range("A2").Delete [ShiftDirection]
  • ShiftDirection(省略可能):削除後にセルをどの方向に詰めるか
    • xlShiftUp(上へ詰める)※デフォルト
    • xlShiftToLeft(左へ詰める)

● 使用例

A. 行内のセルを削除し、左へ詰める

Range("B2").Delete Shift:=xlShiftToLeft

B. セルを削除し、下のセルを上へ詰める(デフォルト動作)

Range("B2").Delete

C. 行全体を削除

Rows("3:3").Delete

D. 列全体を削除

Columns("B:B").Delete

● 応用:条件付きで行削除

If Range("A2").Value = "" Then
Rows("2").Delete
End If

このように、空白セルに応じて行を削除することができます。


2. Range.Insert メソッド

● 概要

Insert メソッドは、指定したセル範囲に新しいセル(行や列)を挿入し、既存のセルを下や右にずらすことでスペースを空けます。


● 基本構文

Range("A2").Insert [ShiftDirection]
  • ShiftDirection(省略可能):新しいセルを挿入し、既存のセルをどの方向へ動かすか
    • xlShiftDown(下へずらす)※デフォルト
    • xlShiftToRight(右へずらす)

● 使用例

A. セルを挿入し、下にずらす(デフォルト)

Range("A2").Insert

B. セルを挿入し、右へずらす

Range("B3").Insert Shift:=xlShiftToRight

C. 行の挿入

Rows("4:4").Insert

D. 列の挿入

Columns("C:C").Insert

3. Insert と Delete の組み合わせでシート構成制御

● 上に追加 → 下から削除

Rows("2:2").Insert
Range("A2").Value = "新しいデータ"
Rows("100").Delete

このコードは「2行目に新しいデータを追加し、100行目を削除する」という例です。


4. 使用上の注意点

注意点説明
Insert / Delete は常にセルを動かすセルの相対位置が変化するため、参照がずれる可能性あり
数式の参照が壊れることがある行/列の挿入や削除で参照がずれることがあるため要注意
Undo(元に戻す)が効かないVBA経由の操作は「元に戻す」対象にならない
範囲を正確に指定しないとシフトが崩れる行や列で使うときは RowsColumns を明示的に使うと安全

5. よくある用途と実例

5.1 データ入力フォームの一番上に最新データを追加

Rows("2:2").Insert
Range("A2").Value = Now()
Range("B2").Value = "ログイン記録"

5.2 不要な行を一括削除(空白チェック)

Dim i As Long
For i = 100 To 2 Step -1
If WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next i

6. 違いを整理(比較表)

比較項目DeleteInsert
操作の対象セル、行、列を削除セル、行、列を挿入
周囲の動き上または左に詰める下または右にずらす
既存データへの影響データを上書き・削除データを押し下げ・右へ移動
用途不要データの削除、構造の整理データ追加、空白の挿入、構成の拡張
デフォルト方向xlShiftUpxlShiftDown

7. よくある誤解

誤解内容実際の動作
Range("A1").Delete はセルの内容だけ消すセル自体が削除され、周囲が詰まる
Insert は空白を作るだけ周囲のデータが物理的にずらされる
Delete で列全体が削除されるとは限らないColumns("A:A").Delete を使う必要あり

8. その他の便利なテクニック

● 1行ごとに入力しながら下へ行追加

Dim nextRow As Long
nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(nextRow, 1).Value = "ログ情報"

まとめ

メソッド概要主な用途
Range.Deleteセル、行、列の削除とシフト(上・左)行列の整理、無駄なスペース削除
Range.Insertセル、行、列の挿入とシフト(下・右)新規データの追加、空白挿入
タイトルとURLをコピーしました