指定した範囲内の空白のセルを行単位で削除するには?

Question 45.3 Previous Next
詳細は こちら マクロを使うのは初めてなのですが、
指定した範囲内の空白のセルを、行単位で削除する事は可能ですか?

※例えば、A1:A5までの表があり、A1:A3までが埋まり、残りの2行を削除したいという場合
(行数はその時々によって異なります)
Answer   Copyright (C) 2001.6.18 永井善王
500連発の読者さん用フォームを使って送信されてきた質問ですが、質問対象のマクロ番号など、アンケートにご記入がありませんでした。
「マクロを使うのは初めて」とのこと、きっと、読者の方かと思いますので、お答えしておきます。

シート 質問の例示では A1:A5の範囲の下の方の A4:A5セルが空白ですから、そのままにしておいても行削除しても、結果は同じかとも思います。しかし左図のように、A1:A5が 「罫線などでレイアウトされた表」であるならば、行削除する意味が出てきます。
マクロコードは、次のとおり簡単です。
    Rows("4:5").Delete Shift:=xlUp
行削除については 「指定した行を削除するには?」のページも参考にしてください。

「行数はその時々によって異なります」ということで、実務においては、むしろ当然のことですが、マクロには工夫が必要になります。
具体的には上記コードの
"4:5" の部分を変数で指定する方法に変えます。例えば次のように書きます。
    Rows(削除範囲).Delete Shift:=xlUp
この変数「削除範囲」には、削除したい行番号をセットしなければなりません。そのため、まず、空白行の範囲を選択する必要があります。マクロコードは、Macroのページの 1)各種選択方法の「シート範囲に関するいろいろな選択方法」の中にある次のコードが使えます。
    Range("A1").SpecialCells(xlBlanks).Select   '空白セルを選択
こうして選択できた空白行の範囲の上端と下端の行番号を、変数「削除範囲」に取得するコードは次のとおりです。
    With Selection                              '選択された範囲の
        上 = .Row                               '上端行番号を取得する
        行数 = .Rows.Count                      '行数を取得する
    End With
    下 = 上 + 行数 - 1                          '下端行番号を算出する
    削除範囲 = 上 & ":" & 下                    '削除する範囲を変数にセットする
以上を整理すると、次のようになります。
Sub 指定した範囲内の空白のセルを行単位で削除する()
1   Worksheets("Sheet1").Activate               'ワークシート"Sheet1"をアクティブに
2   Range("A1").SpecialCells(xlCellTypeBlanks).Select 'A1セルを基点に空白セルを選択
3   With Selection                              '選択された範囲の
4       上 = .Row                               '上端行番号を取得する
5       行数 = .Rows.Count                      '行数を取得する
6   End With
7   下 = 上 + 行数 - 1                          '下端行番号を算出する
8   削除範囲 = 上 & ":" & 下                    '削除する範囲を変数にセットする
9   Rows(削除範囲).Delete Shift:=xlUp           '変数「削除範囲」で指定された行を削除
End Sub
・1行目のコードは、2から6行目までのコードがアクティブシートに作用するので必要です。
・2行目のコードに "A1" とありますが、質問では指定範囲が A1:A5 つまり A列となっているためです。A列を全く使わない方法でデザインされたワークシートの場合は注意が必要です。くわしく知りたければ、500連発第2弾の説明を参照してください。
・3から6行目までのコードは、2行目のコードに続けて書きます。その理由は、3行目の Withステートメントで指定したオブジェクト Selection が、2行目のコードで選択されたセル範囲だからです。
回答は以上で終わりです。
知りたいことを調べる方法
この「すぐマク」のホームページには、[Search]ページがあります。そのページは、キーワード(用語)を入力して[検索]ボタンをクリックすると、「すぐマク」の全ページのタイトルを検索して、ヒットした一覧を表示してくれます。その一覧の中で見たいタイトルをクリックすると、該当ページが表示されます。

シート 例えば 「指定した範囲内の空白のセルを行単位で削除する事は可能ですか?」という質問のキーワードとしては、「範囲」、「空白」、「行」、「削除」などがありますので、[Search]ページにある右図のようなテキストボックスに、どれかを入力して[検索]ボタンをクリックしてみてください。

サンプルブックのダウンロードは ここをクリック (YNxv940_Delete.xls 48KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。

Excel VBA Macro