「excel vba 空白セル 数える」
「エクセルマクロ 空白セル カウント」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
空白セルの数をカウントする、VBA(Visual Basic for Applications)のコード・Excelマクロを探している方による検索です。
Excelには、空白セルをカウントしてくれるワークシート関数・COUNTBLANKが存在しているので、空白セルをカウントするようなマクロが本当に必要なのかを、まずは、よく考えていただく必要があります。
その上で、この件は、Excelのことをよく知らないプログラマーが作ってしまいがちなマクロと、Excelの機能を利用したマクロの比較という意味で、面白いので記事にしておきます。
ループ処理で空白セルを数える
ExcelにCOUNTBLANK関数という、空白セルをカウントしてくれるワークシート関数が存在していることを知らないけれども、プログラムを書くことはできるという方の場合、以下のようなマクロを作るでしょうか。
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
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を使うと、以下のようなコードで済んでしまいます。
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つのマクロを実行して、どれくらいスピードが違うのかを実感してください。
- Newer:右肩上がりのハイプ曲線を目指そうという話 #tbmu
- Older:マクロ初心者の自分にぴったりだった
Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » 空白セルをカウントするExcelマクロ