エクセル

条件に合致したデータの数をVBAで数える(COUNTIF関数っぽい処理)

エクセル

[PR]当サイトはアフィリエイト広告を利用しています。

はじめに

今回は条件に合致したデータの数を数えてみます。

使うのは条件分岐と繰り返しです。

条件分岐に関しては「VBAで条件分岐」

繰り返しに関しては「SUM()関数を再現?繰り返しで合計を求める」

などもご覧ください。

今回の問題

エクセルのシートに次のように入力します。

このデータに対して

値が5より大きな値が何個あるか

という問題に取り組みます。

エクセル関数で求める場合

C12セルに次のように入力します。

=COUNTIF(C4:C11,”>5″)

C12セルに4と出力されたでしょうか?

注意することは条件欄の「”>5″」です。

条件は「””」で囲む必要があります。

VBAで求める場合

コード入力欄に次のように入力します。

Sub count()
    Dim i As Integer
    Dim k As Integer
    k = 0
    For i = 1 To 8
        If (Cells(3 + i, 3) > 5) Then
            k = k + 1
        End If
    Next i
    Range("D12").Value = k
End Sub

D12セルに4と出力されたでしょうか?

コードの解説

    For i = 1 To 8
        If (Cells(3 + i, 3) > 5) Then
            k = k + 1
        End If
    Next i

まずiが1から8まで変化するのでFor文の中身は8回実行されます。

調べたいデータが8個あるのでこうなります。

次のIf文で値が5より大きいかどうか調べています。

Cells(3 + i, 3)

の「3 + i」の3はどうやって求めているかというと、求めたいデータの最初が4行目から始まり、iは1から始まるので、最初が4になるように3となります。

ここは自分で引き算と足し算をして調整する必要があります。

そして

k = k + 1

でkの値を一つ増やしています。

このkの書き方は

新しいkは今のk足す1です

という意味です。

If文に合致していれば条件を満たしたことになるので、そのときに値を一つずつ増やしていけば条件に合致した値が何個あるか数えられますよね。

また例えば

k = 2 * k

と書けば

新しいkは今のk掛ける2

という意味になります。

条件に合致するたびにkが2倍になりますね。

今回はそういうカウントのしかたはしませんが。

大事なのは、左のkに右の計算結果が格納されるということです。

まとめ

今回は条件に合致した値が何個あるかという処理をVBAで求めました。

条件に合致した値が何個あるかという情報はプログラムの中で使うことがあるので、基本として覚えておくといいと思います。