Excelの特定文字をVBAでちゃっちゃとカウントする方法とは?

パソコンパソコン・スマホ教室
スポンサーリンク

Excelを使っていると「セルの中で特定の文字が何回出てくるか数えたい」というシーンに出会うことはありませんか?
例えば「Aという文字が何回登場するか知りたい」「文章の中にスペースはいくつあるのか確認したい」といったケースです。
しかし、通常のCOUNTIF関数ではセル全体の一致しか確認できないため、「文字列の一部を数える」となると途端に難易度が上がります。

ここで役立つのがVBAを使った文字カウント処理です。本記事では、単純なLeft関数やRight関数の解説にとどまらず、検索ユーザーが本当に知りたい「特定の文字数を正確に数える方法」を圧倒的にわかりやすく解説します。初心者でも今日から使える実用的なサンプルコードと、つまずきやすい落とし穴までまとめました。

スポンサーリンク

特定の文字をカウントする基本アプローチ

Excelのイメージ

Excelのイメージ

COUNTIF関数では不十分な理由

COUNTIF関数は「セル全体が条件と一致しているか」を判定するため、「文字列の一部」を数えることはできません。たとえば「Apple」という文字列の中で「p」が2回出てくることを判定することはできないのです。そこでVBAの出番となります。

VBAでの基本的な考え方

VBAで特定の文字を数える場合はLen関数とReplace関数の組み合わせが最もシンプルで強力です。
基本のロジックは以下の通りです。

  1. 対象文字列の全体の長さをLen関数で取得する。
  2. Replace関数で対象の文字を削除した文字列の長さを取得する。
  3. 差分を計算して、対象文字の出現回数を求める。

例えば文字列「banana」の中で「a」が何回あるか数える場合、元の長さ6と「bnn」に置換した長さ3の差分を取ることで、3回と導き出せます。

実用的なサンプルコード集

セル内の特定文字数を数える関数

以下は、セル内で特定の文字が出現する回数を数えるユーザー定義関数(UDF)の例です。

vba
Function CountChar(Target As Range, Char As String) As Long
Dim txt As String
txt = Target.Value
CountChar = (Len(txt) - Len(Replace(txt, Char, ""))) / Len(Char)
End Function

この関数を使えば、セルA1に「banana」と入力されているときに
`=CountChar(A1,”a”)` と入力するだけで「3」と表示されます。

文章全体からスペースや句読点を数える

大量の文章を対象に「スペースが何個あるか」「読点(、)がいくつあるか」を数えたい場合も同様のアプローチで可能です。上記のUDFに「 ” “(半角スペース)」や「、」を指定するだけで一瞬でカウントできます。

複雑な条件に対応するテクニック

複数文字列のカウント

1文字ではなく「ab」や「AI」といった複数文字のパターンを数えたい場合でも、上記のUDFが対応可能です。Replace関数は部分文字列を置換できるため、文字数の差分を割ることで正確に出現回数を導けます。

大文字小文字を区別する

通常のReplace関数は大文字小文字を区別しません。もし「A」と「a」を別物としてカウントしたい場合は、vbBinaryCompareをオプションで指定する方法を利用します。

vba
CountChar = (Len(txt) - Len(Replace(txt, Char, "", , , vbBinaryCompare))) / Len(Char)

この指定により「Apple」の中で「A」を数えると1、「a」を数えると0と区別できます。

文章全体の文字頻度を集計する

1つのセルではなく、大量のテキストに含まれる文字の頻度分析を行いたい場合は、ループ処理を組み合わせるのがおすすめです。たとえばアルファベットのAからZまでを順に調べて、結果を一覧表として出力することも可能です。

文字 出現回数
a 15
b 7
c 3

このような集計を行えば、Excelを使って簡易的なテキストマイニングやデータ分析の入り口としても活用できます。

excel 特定 の 文字 カウント VBAに関する疑問解決

Q1: COUNTIFとの違いは?

COUNTIFはセル単位での一致判定が目的であり、文字列の一部を直接数えることはできません。VBAを使うことで「セル内の一文字ごとの出現回数」まで細かく制御できます。

Q2: 全角と半角は区別される?

VBAはUTF-16を採用しているため、全角も半角も1文字としてカウントされます。たとえば「A」と「A」は別文字ですが、それぞれ1文字として正しく扱われます。

Q3: 処理が遅くならない?

数万セルを一気に処理すると多少の遅延は発生しますが、文字数カウント程度であれば十分高速です。もし速度が気になる場合は、一括処理用に配列を使うとさらに効率が上がります。

今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?

LINE公式

いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」

あなたはこんな経験はありませんか?

✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦

平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。

LINEでメッセージを送れば即時解決!

すでに多くの方が私の公式LINEからお悩みを解決しています。

最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。

誰でも無料で使えますので、安心して使えます。

問題は先のばしにするほど深刻化します。

小さなエラーがデータ消失重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。

あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。

相談しに行く

ぜひ、あなたの悩みを私に解決させてください。

まとめ

Excelで特定の文字を数える作業は、日常業務からデータ分析まで幅広く必要とされる操作です。しかしCOUNTIF関数では対応できず、多くの人がつまずくポイントでもあります。本記事で紹介したLen+Replaceを使ったUDFは、シンプルかつ強力にこの課題を解決します。さらに大文字小文字の区別や複数文字列のカウント、文字頻度分析に応用すれば、Excelの使い方が一段と広がります。

ぜひ今日から実際にコードを試し、あなたのExcel作業を一気に効率化してみてください。

コメント

タイトルとURLをコピーしました