VBAサンプル集
セル番地でバラバラに指定されたセルの削除

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2023-08-24 最終更新日:2023-08-24

セル番地でバラバラに指定されたセルの削除


シート内の複数のセルを削除します。
削除するセルはバラバラです。
A2,A4,B5:B7,C3,E5,E6,E9,…
さて、どういうVBAを書いたら良いでしょうか。
セル削除後は上方向にシフトします。


セルの削除についての基本は以下を参照してください。

第29回.セル・行・列の削除・挿入(Delete,Insert)|VBA入門
・セルの削除 ・セルの挿入 ・セルの削除・挿入時は、Shift:=は必ず指定 ・行・列の削除・挿入 ・行・列の削除/行・列の挿入で、Shift:=は必要か ・行・列の表示・非表示


順番に削除していく

順番に削除するには、下のセルから順に削除しなければなりません。
A2,A4,B5:B7,C3,E5,E6,E9
これならば、
E9,B7,E5,C3,B5:B7,A4,A2
このように、同一列ではより下のセルから削除していかなければなりません。

しかし、そもそもこのように重複の無いセル番地の指定なら、そのまま一括で指定できます。

Range("A2,A4,B5:B7,C3,E5,E6,E9").Delete shift:=xlUp

単純にこれで良いですね。

ですが、セル範囲が重複している場合は、上記のような削除のやり方はエラーになってしまいます。

Range("B5:I5,E2:E9").Delete shift:=xlUp

Excel VBA マクロ セル削除

手動でセル削除した時に出るエラーと同じです。

Excel VBA マクロ セル削除


もちろん順に削除するにしても、重複セルがあるなら、一度削除したセルは2度目は削除してはいけないので相応の仕組みが必要になります。


バラバラに指定されたセルを削除するVBA

Sub DelRange(ByVal aWs As Worksheet, aRange As String)
  Dim r1 As Range, r2 As Range
  For Each r1 In aWs.Range(aRange)
    If r2 Is Nothing Then
      Set r2 = r1
    End If
    If Intersect(r2, r1) Is Nothing Then
      Set r2 = Union(r2, r1)
    End If
  Next
  r2.Delete shift:=xlUp
End Sub
Sub 使用例()
  Dim ws As Worksheet, sRange As String
  Set ws = ActiveSheet
  sRange = "B5:I5,E2:E9"
  Call DelRange(ws, sRange)
End Sub

Intersectを使って重複を判定しつつ、
・Intersectメソッド ・Intersectの使用例 ・Intersectメソッドの最後に
重複の無い状態にして1セルずつUNIONしています。
・Unionメソッド ・Areasプロパティ ・Unionメソッドで連結した結果のRangeオブジェクトの状態について ・Unionメソッドの使用例 ・Unionメソッドの実践例
重複が無くなったRangeで最後にまとめてDeleteです




同じテーマ「マクロVBAサンプル集」の記事

数式の参照しているセルを取得する
増殖した条件付き書式を整理統合する
条件付き書式で変更された書式を取得する
セル結合/解除でセル値を退避/回復
セル結合なんて絶対に許さないんだからね
セルの数式をネスト色分けしてコメント表示
セル結合して表を見やすくする(非推奨)
シートを削除:不定数のシート名に対応
セル番地でバラバラに指定されたセルの削除
シート内に散在する複数表の縦結合
スピル範囲の自動色付け(強調表示)


新着記事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」をお願いいたします。
本文下部へ