VBAで自動化 VBA一覧 データ取得 抽出・検索処理

【VBA】数値セル・特定の文字列のセル・値のセルなどのセル数のカウント方法

ExcelVBAでデータを扱う処理を作成していると、「条件に合うセルが何件あるか」を確認したい場面は非常に多くあります。
数値が入力されているセルの数、特定の文字列を含むセルの数、何らかの値が入っているセルの数などは、データを取得・抽出・検索する処理の前提条件として欠かせません。

しかし実務では、空白セル・数式セル・エラー値・文字列と数値の混在などが原因で、「思っていた件数と合わない」「条件分岐が正しく動かない」といった問題が起こりがちです。
この記事では、VBAでデータ取得処理を行う前段階という視点から、セル数を正しくカウントする方法を体系的に解説します。

✅ データ取得処理においてセル数のカウントが重要な理由

抽出・検索・取得といった処理では、多くの場合「対象データが存在するか」「何件あるか」を基準に処理を分岐させます。
この判断が曖昧なまま処理を進めると、不要な処理が実行されたり、逆に本来必要な処理がスキップされたりします。

たとえば、
・数値データが1件も存在しないのに集計処理を実行してしまう
・特定のキーワードを含む行がある前提で検索処理を書いてしまう
といったケースです。

セル数を正しく把握することは、データ取得処理の入口を安全に制御するための基本と言えます。


✅ 数値が入力されているセルをカウントする方法

売上・数量・金額など、数値データを扱う処理では、まず「数値が入っているセルが存在するか」を確認する必要があります。
VBAでは IsNumeric 関数を使うのが基本です。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If IsNumeric(c.Value) And c.Value <> "" Then
        cnt = cnt + 1
    End If
Next c

・処理の考え方

IsNumeric は「数値として解釈できるか」を判定します。
ただし、空白セルを除外したい場合が多いため、c.Value <> "" を併用しています。

このカウント結果は、
・数値データが存在するかどうかの事前判定
・取得処理を実行してよいかの判断
といった場面でよく使われます。


✅ 値が入っているセル(空白でないセル)をカウントする方法

数値か文字列かを問わず、「何か値が入力されているセル」を対象にしたい場合は、空白判定を行います。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If c.Value <> "" Then
        cnt = cnt + 1
    End If
Next c

・利用シーン

この方法では、数値・文字列・数式結果・エラー値も含まれます。
そのため、
・未入力行の検出
・データが存在する行数の把握
といった用途に向いています。


✅ 特定の文字列を含むセルをカウントする方法

検索処理や条件抽出の前段では、「特定のキーワードを含むデータがあるか」を確認することがよくあります。
この場合は InStr 関数を使います。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If InStr(c.Value, "エラー") > 0 Then
        cnt = cnt + 1
    End If
Next c

・実務での使いどころ

・コメント欄に「要確認」「エラー」といった文言が含まれているか
・検索対象となるデータが1件以上あるか

事前に件数を把握することで、無駄な検索処理を回避できます。

参考:【VBA】空白セルを削除して上詰めする方法


✅ 特定の文字列と完全一致するセルをカウントする方法

ステータス管理や区分コードのように、条件が明確に決まっている場合は完全一致で判定します。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If c.Value = "完了" Then
        cnt = cnt + 1
    End If
Next c

・部分一致との違い

部分一致では「完了予定」「未完了」なども含まれてしまう可能性があります。
取得条件が明確な場合は、完全一致を使う方が安全です。


✅ 複数条件でセルをカウントする方法

実務のデータ取得処理では、条件が1つだけということはほとんどありません。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If IsNumeric(c.Value) And c.Value > 0 Then
        cnt = cnt + 1
    End If
Next c

・設計のポイント

条件は必ず「日本語で整理してからコードに落とす」ことが重要です。
どの条件を満たしたらカウントするのかを明確にすることで、判定ミスを防げます。


✅ エラーセルを除外して安全にカウントする方法

CSV取込後や数式列では、エラー値が含まれることがあります。
これを想定していないと、処理が途中で停止してしまいます。

Dim cnt As Long
Dim c As Range

For Each c In Range("A1:A100")
    If Not IsError(c.Value) Then
        If c.Value <> "" Then
            cnt = cnt + 1
        End If
    End If
Next c

・なぜ必要か

データ取得処理では、「止まらないこと」が最優先です。
エラーを除外しておくだけで、処理の安定性が大きく向上します。

参考:【VBA】特定のセル(空白セル・数式セル・エラーセル)を見つけ出す:SpecialCells メソッド


✅ Excel関数によるカウントとの違い

Excel関数でもセル数を数えることはできますが、VBAには以下の特徴があります。

  • 条件を柔軟に組み合わせられる
  • エラー処理を組み込める
  • 抽出・検索・取得処理と直接連携できる

データ取得処理の一部としてカウントを行える点が、VBAならではの強みです。


✅ よくある失敗と注意点

  • 空白セルと0を同じ意味で扱ってしまう
  • 部分一致と完全一致を混同する
  • エラー値を想定していない

これらは、カウント結果が合わない原因になりやすいため、事前に意識しておくことが重要です。


 

✅ まとめ:データ取得処理で使えるセル数カウントの考え方

  • セル数のカウントはデータ取得処理の入口判定
  • 数値・空白・文字列は目的別に判定方法を分ける
  • 部分一致と完全一致を使い分ける
  • 複数条件は整理してから実装する
  • エラーを除外して安定した処理にする

セル数を正しくカウントできるようになると、
VBAによる抽出・検索・データ取得処理の精度と信頼性が大きく向上します。
ぜひ今回の内容を、実務の自動化処理に活用してみてください。

参考:【VBA】Excelシート全体の置換を自動化する方法|部分一致・完全一致まで徹底解説

    -VBAで自動化, VBA一覧, データ取得, 抽出・検索処理