【VBA道場】#39 空白行を削除する

ExcelVBA

【VBA道場】#39 空白行を削除する



問題

空白の行をIF文を使わずに削除してください。

 

完成見本

解答

Sub vba_doujyou_39()

 'A1~A13のセルで空白のセルがあったらその行を削除する
  Range("A1:A13").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

 

サンプルファイル(マクロ無)

サンプルファイル(マクロ有)

解説

Rangeオブジェクト.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
空白行を削除する

SpecialCellsメソッドについてはVBA道場30で触れました。

 

SpecialCellsメソッドは、「ホーム」タブ→「編集」→「検索と選択」→「ジャンプ」を実行して表示される「ジャンプ」ダイアログボックスで「セル選択」を実行したときと同じ働きをします。

このメソッドを使用すると、If文を使うことなく、簡単に空白セルなどを操作することができます。

 

では、コードを見ていきましょう。

'A1~A13のセルで空白のセルがあったらその行を削除する
Range("A1:A13").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

今回はA1~A13のセルの中で、空白セル(SpecialCells(xlCellTypeBlanks))があった時に行を削除(EntireRow.Delete)するというコードになっています。

 

では、もしSpecialCellsメソッドを使わないと、どうなるでしょうか。

 

Sub vba_doujyou_39()

 ’変数iを定義
  Dim i As Long

 ’1から13まで繰り返す
  For i = 1 To 13

     If Range("A" & i).Value = "" Then       ’もしA列が空白だったら
           Range("A" & i).EntireRow.Delete         ’その行を削除
     End If
  Next i

End Sub

If文とFor文を組み合わせた非常に複雑なコードになってしまいますね。

 

続いて、SpecialCellsメソッドも復習しておきましょう。

今回は空白セルを検索したかったので、「xlCellTypeBlanks」を使用しました。
他にも、SpecialCellsメソッドの引数には下記のようなものが指定できます。

xlCellTypeAllFormatConditions 表示形式が設定されているセル
xlCellTypeAllValidation 条件の設定が含まれているセル
xlCellTypeBlanks 空白セル
xlCellTypeComments コメントが含まれているセル
xlCellTypeConstants 定数が含まれているセル
xlCellTypeFormulas 数式が含まれているセル
xlCellTypeLastCell 使われたセル範囲内の最後のセル
xlCellTypeSameFormatConditions 同じ表示形式が設定されているセル
xlCellTypeSameValidation 同じ条件の設定が含まれているセル
xlCellTypeVisible すべての可視セル

 

おわりに

今回はSpecialCellsメソッドを使って、空白セルの行を削除しました。
SpecialCellsメソッドは非常に便利なので、しっかりとマスターしましょう。

本日はここまで!

 

おすすめ参考書

Amazon

たった1秒で仕事が片付くExcel自動化の教科書

いちばんやさしいExcelVBAの教本

ExcelVBA逆引き辞典 パーフェクト

楽天

いちばんやさしいExcelVBA

 

 

すらすら読めるExcelVBA

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

スラスラ読めるExcel VBAふりがなプログラミング [ リブロワークス ]
価格:2035円(税込、送料無料) (2021/4/22時点)

楽天で購入

 

 

 

VBA逆引き大辞典

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Excel VBA逆引き辞典パーフェクト第3版 [ 田中亨 ]
価格:2838円(税込、送料無料) (2021/4/22時点)

楽天で購入

 

 

タイトルとURLをコピーしました