VBA入門
セル・行・列の削除・挿入(Delete,Insert)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-09-01

第29回.セル・行・列の削除・挿入(Delete,Insert)


単一セルまたは複数セルの削除・挿入と行・列の削除・挿入についてのマクロVBAを解説します。


単一セルまたは複数セルを指定しての行全体・列全体に対する削除・挿入と、行・列を指定しての削除・挿入は結果としては同じ事になりますが、
マクロVBAの書き方には違いがあり、実際のVBAでは使い分けが必要になる場合があります。

以下、Cells(行, 列)、Rows(行位置)、Columns(列位置)は、Rangeで書き換え可能です。
また、複数セル・複数行・複数列の指定も同様です。


セルの削除

セルを削除するには、

Cells(行, 列).Delete

このように記述します。
手動でセルを削除した場合は以下のダイアログが表示されます。

マクロ VBA セルの削除

マクロVBAでも、この4通りの書き方があります。

左方向にシフト

Cells(行, 列).Delete Shift:=xlToLeft

上方向にシフト

Cells(行, 列).Delete Shift:=xlUp

行全体

Cells(行, 列).EntireRow.Delete

EntireRowは、指定セルが含まれる行全体になります。
EntireRowは、RangeオブジェクトのプロパティでRangeオブジェクトを返します。

列全体

Cells(行, 列).EntireColumn.Delete

EntireColumnは、指定セルが含まれる列全体になります。
EntireColumnは、RangeオブジェクトのプロパティでRangeオブジェクトを返します。


セルの挿入

セルを挿入するには、

Cells(行, 列).Insert

このように記述します。
手動でセルを挿入した場合は以下のダイアログが表示されます。

マクロ VBA セルの挿入

マクロVBAでも、この4通りの書き方があります。

右方向にシフト

Cells(行, 列).Insert Shift:=xlToRight

下方向にシフト

Cells(行, 列).Insert Shift:=xlDown

行全体

Cells(行, 列).EntireRow.Insert

EntireRowは、指定セルが含まれる行全体になります。

列全体

Cells(行, 列).EntireColumn.Insert

EntireColumnは、指定セルが含まれる列全体になります。


セルの削除・挿入時は、Shift:=は必ず指定

Shift:=は省略可能なのですが、
セルの挿入削除時には、Shift:=は必ず指定しましょう。

省略した場合は、どちらにシフトされるかは選択セル範囲の形によって自動で判定されます。
縦長か、横長かによって、自動的に上下左右が決定されます。

しかしそれでは、マクロを見ただけでは、どちらにシフトするかが不明になってしまいますし、
データの状態によって動作が変わってきてしまいます。
従って、必ずShift:=は指定して下さい。


行・列の削除・挿入

行の削除

Rows(行位置).Delete

行の挿入

Rows(行位置).Insert

列の削除

Columns(列位置).Delete

列の挿入

Columns(列位置).Insert

上記のRowsは、Cells(行, 列).EntireRowでも同じです。
上記のColumnsは、Cells(行, 列).EntireColumnでも同じです。


行・列の削除/行・列の挿入で、Shift:=は必要か

マクロの記録で作成される行削除した時のVBAコードは、

Rows("6:6").Select
Selection.Delete Shift:=xlUp

このように記録されます。
これを元に作成したマクロ

Rows("6:6").Delete Shift:=xlUp

このShift:=xlUpが必要なのか、との質問が時々あります。
結論としては、不要です。

行削除したら、削除後は上にシフトする以外にありえません。

Rows(6).Delete Shift:=xlDown

このように記述しても正しく動作(上にシフト)してしまいます。
つまり、行・列の挿入・削除では、Shift:=の指定は意味がありません。

まとめると
セル範囲の挿入・削除では、Shift:=は必須
行・列の挿入・削除では、Shift:=は不要


行・列の表示・非表示

削除・挿入に関連して、行・列の表示・非表示を設定する事もVBAではできます。
行・列の表示・非表示については以下で解説しています。

第141回.行・列の表示・非表示(Hidden)
・セルの非表示 ・行の表示・非表示 ・列の表示・非表示 ・セルが表示されているか(可視セルか)の判定方法 ・列幅・行高




同じテーマ「マクロVBA入門」の記事

第26回.総合練習問題2
第27回.ブック・シートの選択(Select,Activate)
第28回.セル・行・列の選択(Select,ActivateとCurrentRegion)
第29回.セル・行・列の削除・挿入(Delete,Insert)
第30回.総合練習問題3
第31回.セルの書式(表示形式,NumberFormatLocal)
第32回.セルの書式(配置,Alignment)
第33回.セルの書式(フォント,Font)
第34回.セルの書式(塗りつぶし,Interior)
第35回.セルの書式(罫線,Border)
第36回.総合練習問題4


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ