Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » VBAでCountIfを使って空白以外のセルをカウント

VBAでCountIfを使って空白以外のセルをカウント

対象:Excel2010, Excel2013, Windows版Excel2016

オブジェクトブラウザー:WorksheetFunction.CountIf

「エクセル VBA COUNTIF 空白以外」
「excel vba countif 空白を除く」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが、割とあります。

Excel VBAから、ワークシート関数のCOUNTIFを使って空白ではないセルの数をカウントするには、どのようなコードを書けばいいのか探していた方による検索です。

[スポンサードリンク]

WorksheetFunction.CountIfで空白以外をカウントするサンプルマクロ

以下のSubプロシージャを実行すると、A1:A10セルのうち、空白ではないセルの数がメッセージボックスに表示されます。
Sub 空白以外のセルをカウントする()
 Dim n As Long
 n = WorksheetFunction.CountIf(Range("A1:A10"), "<>")
 MsgBox n
End Sub

サンプルマクロの解説

「エクセル VBA COUNTIF 空白以外」
「excel vba countif 空白を除く」
と検索なさった方は、WorksheetFunctionオブジェクトのCountIfメソッドの引数を、どう指定すればいいのか戸惑っていたのでしょう。

WorksheetFunction.CountIfメソッドの第1引数

オブジェクトブラウザー等を確認すればわかるとおり、第1引数にはRangeオブジェクトを指定します。

オブジェクトブラウザー:WorksheetFunction.CountIf

具体的にはRangeオブジェクトを取得する何らかのコード(オブジェクト式)を書けばOKです。

上記のサンプルでは、Rangeオブジェクトを取得するプロパティのうち、もっとも基本的なRangeプロパティを使っています。
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>")

WorksheetFunction.CountIfメソッドの第2引数

第2引数には条件を指定します。

空白以外という条件は「"<>"」(比較演算子のノットイコールをダブルクォーテーションで括った状態)です。

かなり不思議な記述ですが、
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>")
を、
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>" & "")
と書くと、多少ましではないかと思います。

空白ではないということで、空白文字列を意味する「""」(ダブルクォーテーション2個)の前に比較演算子のノットイコール「<>」を連結した「"<>" & ""」を、WorksheetFunctionオブジェクトのCountIfメソッドの第2引数に指定したのが、
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>" & "")
です。

「"<>" & ""」は、結局「"<>"」と同じですから「"<>" & ""」の「 & ""」を省略しているのが、
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>")
です。

WorksheetFunction.CountIfの第2引数については、COUTIF関数を使って空白以外のセルをカウントするワークシート上の数式を、先に理解することをおすすめします。

WorksheetFunnction.CountIfの戻り値はDouble

メインテーマとは関係ありませんけれど、WorksheetFunnction.CountIfメソッドの戻り値は、

オブジェクトブラウザー:WorksheetFunction.CountIf

Doubleなんですね。
この記事を書いていて気付きました。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » WorksheetFunction » VBAでCountIfを使って空白以外のセルをカウント

「WorksheetFunction」の記事一覧

検索


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

.