【2026年7月最新】VBAで行・列を削除・クリアする完全ガイド|Delete・Clear・条件付き削除・重複行削除・逆順ループまで実践コード集
この記事の内容
「不要な行を一括削除したい」「VBAで行を削除するとインデックスがずれてしまう」「ClearとDeleteの違いが分からない」——VBAで行・列の削除とクリアを実装する際によく起きる問題です。
この記事では、Rows.Delete・Columns.Delete・Clear・ClearContentsの基本から、複数行削除で必須の逆順ループ・条件付き行削除・重複行削除・空白行削除まで、実務でそのまま使える実践コードとともに解説します。
01 ROW DELETE VBAで行を削除する基本メソッド(Rows.Delete・EntireRow.Delete) 単一行・範囲指定・セル基準の3種類の行削除コードを使い分ける
VBAで行を削除するには主に2つのアプローチがあります。Rows()で行番号を直接指定する方法と、Range().EntireRowでセルを起点に行全体を取得する方法です。
📚 用語解説
Deleteメソッド(VBA):Excelの行・列・セルを削除するVBAメソッド。「Rows(3).Delete」で3行目を削除します。Deleteを実行すると行全体が削除され、下の行が上に詰まります(上にシフト)。これが「行番号のずれ」の原因になるため、複数行削除時は後述の逆順ループが必要です。
1-2. Deleteメソッドのシフト方向を指定する
DeleteメソッドにはShift引数があり、削除後のセルの移動方向を指定できます。行削除では通常xlShiftUp(上方向シフト)を使いますが、明示的に指定することで意図を明確にできます。
02 COLUMN DELETE VBAで列を削除する基本メソッド(Columns.Delete・EntireColumn.Delete) 列番号・列記号・セル基準の3種類の列削除コードを解説
列の削除も行削除と同じ構造です。Columns()で列番号または列記号("A"〜"Z")を指定するか、Range().EntireColumnでセルを起点に列全体を取得します。
📚 用語解説
EntireColumn / EntireRow(VBA):Rangeオブジェクトのプロパティで、指定したセルが属する列全体・行全体のRangeを返します。「Range("C5").EntireColumn」はC列全体(C:C)と同じ範囲を指します。セル参照をコードに直接書かず、変数で管理している場合に特に便利です。
03 REVERSE LOOP 複数行・列の削除で必須の「逆順ループ」とは 順方向ループで行が1つずつスキップされる原因と逆順ループによる解決策
VBAで「条件に一致する行を順番にループして削除する」コードを書くと、行が1つおきにしか削除されないバグに遭遇することがあります。これはDeleteで行が詰まることによる「インデックスずれ」が原因です。
For i = 1 To 10 の順方向ループで3行目を削除すると、元の4行目が3行目に移動します。次にi=4を処理しようとすると、元の5行目を見てしまい、元の4行目(現在の3行目)をスキップしてしまいます。これが「1行おきに削除が漏れる」バグの原因です。
行3削除→行4が行3に移動→i=4で元の行5を処理→元の行4をスキップ
削除が1行おきに漏れる
最終行から先頭に向かって削除→上の行インデックスは変わらない
Step -1で完全動作
「Cells(Rows.Count, 1).End(xlUp).Row」はVBAで最終行番号を取得するイディオムです。「Rows.Count」でExcelの最大行数(1,048,576)を取得し、そこからCtrl+Upキーと同じ動作(xlUp)でデータがある最後の行に移動します。A列にデータがない場合は他の列番号に変更してください(例: Cells(Rows.Count, 2).End(xlUp).Row でB列基準)。
04 CLEAR METHODS Clear・ClearContents・ClearFormatsの違いと使い分け 「値だけ消したい」「書式だけ残したい」ケース別の選択基準
行・列の「削除(Delete)」は行・列そのものを取り除く操作ですが、「クリア(Clear系)」はセルの位置は残したまま内容だけを消去します。Clear系メソッドは3種類あり、何を消すかで使い分けます。
📚 用語解説
ClearContents(クリアコンテンツ):VBAでセル・行・列の「値と数式だけ」を消去するメソッド。書式(色・フォント・罫線等)はそのまま残ります。テンプレートの入力欄をリセットするときなど、書式を保持しながら値だけ消したい場合に使います。「Rows(3).ClearContents」で3行目の値だけを消去します。
| メソッド | 消去対象 | 残るもの | 使いどころ |
|---|---|---|---|
| Clear | 全てを消去 | 何も残らない | セルを完全リセット(書式も不要) |
| ClearContents | 値・数式のみ | 書式(色・罫線・フォント)が残る | テンプレートの入力欄リセット |
| ClearFormats | 書式のみ | 値・数式が残る | データはそのままで見た目をリセット |
| ClearComments | コメントのみ | 値・書式が残る | コメントだけ一括削除 |
05 CONDITIONAL DELETE 条件付き行削除(特定の値を含む行を自動削除) InStr・条件比較・複数条件のOr/And検索を使った実践削除コード
実務でよく使うのが「特定の値が入っている行を全て削除する」パターンです。例えば「A列が"完了"の行を削除する」「B列が空欄の行を削除する」「複数条件("A"かつ"B")に一致する行を削除する」などです。
📚 用語解説
InStr関数(VBA):VBAで文字列が含まれているかを調べる関数。「InStr(対象文字列, 検索文字列)」で検索文字列が見つかった位置(1始まり)を返します。見つからなければ0を返します。「If InStr(Cells(i, 1).Value, "削除") > 0 Then」で「A列に"削除"という文字を含む行」を検出できます。完全一致ではなく部分一致で検索できる点が特徴です。
06 REMOVE DUPLICATES 重複行の削除(RemoveDuplicates) 1列基準・複数列組み合わせ基準の重複削除を解説
Excelのデータに重複した行が混在している場合、VBAのRemoveDuplicatesメソッドを使うと一括で重複行を削除できます。手動で「データ」タブ→「重複の削除」を操作するよりも、マクロで自動化することで毎回の操作を省略できます。
📚 用語解説
RemoveDuplicates(リムーブデュプリケーツ):Excelの指定範囲内の重複行を削除するVBAメソッド。「Range("A1:C100").RemoveDuplicates Columns:=Array(1), Header:=xlYes」の形式で使います。「Columns:=Array(1)」で重複判定する列を指定(1=A列)、複数列の組み合わせで判定する場合はArray(1,2)のように指定します。「Header:=xlYes」で1行目をヘッダーとして扱い、削除対象から除外します。
07 BLANK ROW DELETE 空白行・空白列を一括削除する実践コード IsEmpty・SpecialCells(xlCellTypeBlanks)を使った空白行削除パターン
データ整理でよく必要になるのが「A列が空欄の行を全て削除する」操作です。CSVをExcelに取り込んだ際や、データが飛び飛びで入力されているケースで発生します。
📚 用語解説
IsEmpty関数(VBA):VBAでセルが空欄(値も数式もない状態)かどうかを判定する関数。「If IsEmpty(Cells(i, 1)) Then」でA列のi行目が空欄かを確認できます。スペースが入力されたセルはIsEmptyでFalseになるため、スペースを含む場合はTrim関数を組み合わせて「If Trim(Cells(i, 1).Value) = "" Then」の形式を使います。
7-2. 処理速度を上げる最適化テクニック(ScreenUpdating)
大量の行を削除する際に処理が遅い場合、Application.ScreenUpdating = Falseで画面更新を止めることで大幅に高速化できます。
08 CLAUDE CODE VBA Claude CodeでVBA削除処理を自動生成する 「条件を日本語で伝えるだけ」でVBAコードが完成する手順
VBAの削除コードは「どの列を基準にするか」「完全一致か部分一致か」「逆順ループが必要かどうか」など、ケースによって微妙に異なります。Claude Codeに削除条件を日本語で伝えるだけで、最適なVBAコードを自動生成できます。
「A列が空欄の行を削除して」
逆順ループ・最適化込み
Alt+F11でエディタを開く
手作業から解放
| VBA操作 | 手作業の時間 | VBAマクロの時間 | 削減効果 |
|---|---|---|---|
| "完了"行の削除(100行) | 5分 | 3秒 | 99%削減 |
| 空白行の一括削除(500行) | 20分 | 5秒 | 99%削減 |
| 重複行の削除(1000行) | 30分 | 2秒 | 99%削減 |
| 複数条件の行削除(300行) | 15分 | 3秒 | 99%削減 |
VBA業務自動化・Excelマクロ開発をClaude Code×AI鬼管理で高速化
行削除・データクリーニング・重複行処理など、毎回手作業で行っているExcel業務を、Claude Codeを使ったVBAマクロで自動化する方法をご紹介します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. VBAで行を削除するときになぜ逆順ループ(Step -1)が必要なのですか?
A. 行を削除すると下の行が1つ上に詰まるため、順番(1,2,3...)にループすると行番号がずれてしまいます。例えば3行目を削除すると元の4行目が3行目になります。次にi=4を処理しようとすると、元の5行目(新しい4行目)を処理してしまい、元の4行目(新しい3行目)をスキップしてしまいます。逆順ループ(最終行から先頭へStep -1)で処理すれば、下の行を削除しても上の行のインデックスは変わらないため正しく動作します。
Q. VBAのClearとDeleteは何が違いますか?
A. DeleteはExcelの行・列・セルそのものを取り除き、隣の行・列・セルが詰まります(行が削除されると下の行が上に移動)。ClearはExcelの行・列・セルの中身(値・書式・数式等)を消去しますが、行・列・セルの位置は変わりません。テンプレートの入力欄をリセットしたい場合はClear(またはClearContents)を使い、不要な行を取り除きたい場合はDeleteを使います。
Q. VBAでA列が空欄の行を全て削除する最も簡単なコードは?
A. 「On Error Resume Next: Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete: On Error GoTo 0」の1行で空白行を一括削除できます。ただし、A列が空欄でも他の列にデータがある行も削除されるので注意が必要です。特定の条件で空白行を削除したい場合は、For文とIsEmpty・Trim関数を組み合わせたコードを使います。
Q. VBAのRemoveDuplicatesで全列が重複しているときだけ削除するにはどうすればいいですか?
A. 「Range("A1:E" & lastRow).RemoveDuplicates Columns:=Array(1,2,3,4,5), Header:=xlYes」のようにColumnsに全列番号を指定します。5列あれば1から5を全てArrayに含めます。これで全列の値の組み合わせが完全に一致している場合のみ重複と見なして削除します。
Q. VBAで特定のシートの全データをクリアするにはどうすればいいですか?
A. Sheets("シート名").Cells.Clear で指定したシートの全セルをクリアできます。値・書式・数式・コメントが全て消えます。値だけを消してテンプレートの書式を残したい場合は「Sheets("シート名").Cells.ClearContents」を使います。また「Sheets("シート名").UsedRange.ClearContents」でデータが存在する範囲だけをクリアすることもできます。
Q. VBAでフィルター結果の可視行だけを削除するにはどうすればいいですか?
A. 「ActiveSheet.AutoFilter.Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete」でオートフィルターで絞り込まれた可視セルの行だけを削除できます。Offset(1, 0)でヘッダー行(1行目)を除外しています。フィルターが設定されていない場合はAutoFilterを先に設定するか、On Error Resume Nextでエラーを無視してください。
なお、大量の行に対してDeleteを繰り返す場合、画面が点滅して遅く感じることがあります。これはExcelが行削除のたびに画面を再描画しているためです。Application.ScreenUpdating = Falseを設定すると再描画を止め、全件削除後にTrueに戻すことで処理が大幅に高速化します。100行の条件付き削除で体感10倍以上速くなるケースもあります。またApplication.Calculation = xlCalculationManualで自動計算を止めておくとさらに効果的です。必ず処理後に両方を元の値に戻してください。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




