Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » 空白セルをカウントするExcelマクロ

空白セルをカウントするExcelマクロ

対象:Excel2003, Excel2007, Excel2010, Excel2013

「excel vba 空白セル 数える」
「エクセルマクロ 空白セル カウント」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

空白セルの数をカウントする、VBA(Visual Basic for Applications)のコード・Excelマクロを探している方による検索です。

Excelには、空白セルをカウントしてくれるワークシート関数・COUNTBLANKが存在しているので、空白セルをカウントするようなマクロが本当に必要なのかを、まずは、よく考えていただく必要があります。

その上で、この件は、Excelのことをよく知らないプログラマーが作ってしまいがちなマクロと、Excelの機能を利用したマクロの比較という意味で、面白いので記事にしておきます。

[スポンサードリンク]

ループ処理で空白セルを数える

ExcelにCOUNTBLANK関数という、空白セルをカウントしてくれるワークシート関数が存在していることを知らないけれども、プログラムを書くことはできるという方の場合、以下のようなマクロを作るでしょうか。

Sub 空白セルをカウントする_ループ処理()
 Dim rng As Range
 Dim cnt As Long
 
 If TypeName(Selection) <> "Range" Then Exit Sub

 For Each rng In Selection
  If Len(rng.Value) = 0 Then cnt = cnt + 1
 Next rng

 MsgBox Format(cnt, "#,##0")
End Sub

セル範囲を選択しておいて上記のマクロを実行すると、その範囲内に含まれる空白セルの数がメッセージボックスに表示されます。

選択範囲のセルに対してループを回し、
 For Each rng In Selection

空白セルだった場合に、変数・cntに「1」を加算して、
  If Len(rng.Value) = 0 Then cnt = cnt + 1

最後にメッセージボックスにその数を表示します。
 MsgBox Format(cnt, "#,##0")

空白セルの数が多い場合のことを考えて、ここではFormat関数を使って3桁区切りカンマを入れています。

また、選択されているのがセルでなかったときにエラーとならないように、上記の処理に入る前に選択されているのが何かをチェックしてセル範囲でなかったときには、マクロを終了しています。
 If TypeName(Selection) <> "Range" Then Exit Sub

VBAでCOUNTBLANK関数を使って空白セルを数える

ワークシート関数のCOUNTBLANKを使うと、以下のようなコードで済んでしまいます。

Sub 空白セルをカウントする_COUTBLANK関数()
 Dim cnt As Long

 If TypeName(Selection) <> "Range" Then Exit Sub

 cnt = WorksheetFunction.CountBlank(Selection)
 MsgBox Format(cnt, "#,##0")
End Sub

ループを回す必要はなく、WorksheetFunction.CountBlankメソッドの引数に選択範囲を指定するだけです。
 cnt = WorksheetFunction.CountBlank(Selection)

もちろん、後者のほうが圧倒的に速いです。

是非A:Z列あたりを選択して、2つのマクロを実行して、どれくらいスピードが違うのかを実感してください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » 空白セルをカウントするExcelマクロ

「WorksheetFunction」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.