スプレッドシート特定の文字カウント術!複数条件の数え方

日々データを扱っていると、スプレッドシートで特定の文字をカウントしたい場面によく遭遇しますよね。単純に文字の数を数えるだけなら簡単そうに思えますが、いざやってみると一つのセル内にある特定の文字の出現回数を数えたかったり、大文字と小文字をしっかり区別して完全一致や部分一致でカウントしたかったりして、意外と奥が深いことに気づきます。時には複数の条件を組み合わせてみたり、少し高度に正規表現を使って抽出を試みたりするものの、なぜかエラーになってうまくできないと頭を抱えてしまうこともあるのではないでしょうか。膨大なデータを前にして一つひとつ目視で確認するのは現実的ではありませんし、正確な集計は業務の質に直結しますから、なんとかスッキリと解決したいところです。

特定の文字カウント
  • セル内の特定文字の出現回数を数える関数の組み合わせ方
  • 複数条件を指定してセルの数をカウントする実践的な手順
  • 大文字と小文字の区別や正規表現を用いた高度な抽出方法
  • 計算エラーの原因とデータクレンジングによる根本的な解決策
スポンサーリンク

スプレッドシートで特定の文字をカウントする方法

それではさっそく、スプレッドシート上で文字や文字列の数を数えるための具体的なテクニックを見ていきましょう。普段からHTMLを組むときにコードの規則性を意識している私としては、関数を組み合わせてロジックを作っていく過程はとても楽しい作業だなと感じています。まずは基本となるセル内の文字数の数え方や、条件指定の方法から順番に解説していきますね。

セル内の出現回数をLEN関数で算出

スプレッドシートでカウントというと「COUNTIF関数」を思い浮かべる方が多いかもしれませんが、実はCOUNTIFは「条件に一致するセルの個数」を数えるものです。そのため、1つのセルの中に特定のキーワードが何回出てくるかを数えたい場合、COUNTIFでは対応できません。

こんな時に活躍するのが、文字の長さを測るLEN関数と、文字を置き換えるSUBSTITUTE関数の組み合わせです。このアルゴリズムはとても論理的で美しいんですよ。

特定の文字をカウントする数式の基本
=(LEN(対象セル) - LEN(SUBSTITUTE(対象セル, "特定の文字", ""))) / LEN("特定の文字")

仕組みはとてもシンプルです。まず、元の文章全体の文字数をLEN関数で数えます。次に、SUBSTITUTE関数を使って数えたい「特定の文字」を空白(””)に置き換えて消し去り、その文字がなくなった状態の文字数を再度LEN関数で測ります。最後に、元の文字数から減った分の文字数を引き、それを「特定の文字」自体の文字数で割ることで、出現回数がバッチリ計算できるんです。

ちなみに、LEN関数は全角も半角も1文字として数えますが、バイト数で計算しなければならない特殊なシステム連携などの場合は、LENB関数を使うこともあるので覚えておくと便利かも知れません。

COUNTIF関数を用いた複数条件の指定

特定の範囲の中から「条件に合うセルがいくつあるか」を数えるなら、やっぱりCOUNTIF関数の出番ですね。ただ、実際の業務では「ステータスが完了」かつ「日付が今月中」のように、複数の条件を同時に満たすものを数えたいケースがほとんどだと思います。

そんな時は、COUNTIFS関数(最後にSがつきます)を使うのがスマートです。この関数を使えば、条件をいくつでも重ねて指定していくことができます。

=COUNTIFS(A2:A100, "完了", B2:B100, ">=2025/1/1", B2:B100, "<=2025/1/31")

ここで気をつけていただきたいのは、日付や文字列を指定する際、必ずダブルクォーテーション(””)で囲むというルールです。これを忘れると、日付のスラッシュが割り算として計算されてしまって、結果が0になってしまうなんていう落とし穴があります。

大文字と小文字を区別するEXACT関数

商品コードやIDの管理をしていると、「A123」と「a123」を全く別のものとしてカウントしたい場面がありますよね。しかし、スプレッドシートのCOUNTIF関数はとってもおおらかで、大文字と小文字、さらに全角と半角まで同じものとして扱ってしまいます。

厳密な判定が必要な場面でこの仕様は少し困りものです。そこで登場するのが、2つの文字列が完全に同じかどうかを判定してくれるEXACT関数です。

EXACT関数とARRAYFORMULAを組み合わせることで、指定した範囲内で完全に大文字小文字が一致するセルだけを数え上げることができます。また、セルの中に特定の文字列が含まれているか(部分一致)を厳密に調べたい時は、大文字小文字を区別するFIND関数を使うのがおすすめです。

SEARCH関数との違い
似たような関数にSEARCH関数がありますが、こちらは大文字小文字を区別しません。厳密な検索をしたい時は必ずFIND関数を使いましょう。

空白セルと空文字列を正確に区別する

データの集計をしていると、「空白を数えたい」というシチュエーションが出てきます。でも、スプレッドシートの世界では「空白」にも2種類あるんです。誰も何も入力していない純粋な未入力セルと、IF関数などの結果として返された「空の文字列(””)」です。

純粋な未入力セルだけを厳格に数えたい場合は、COUNTIF関数で条件に "=" を指定します。一方で、数式の結果として空っぽに見えるセルも含めて数えたい場合は "" を指定します。

よく使われるCOUNTBLANK関数は、この両方をまとめて「空白」として数えてしまうので、データの性質に合わせて適切な関数を選び分けることが、正確なマークアップやプログラミングと同じように重要になってきます。

正規表現を活用した高度な抽出テクニック

「アルファベット2文字から始まって、ハイフンの後に数字が4桁続くコードだけを数えたい」といった複雑な要望には、ワイルドカード(*や?)だけでは太刀打ちできません。ここで私たちの強い味方になってくれるのが正規表現(Regular Expression)です。

スプレッドシートには REGEXMATCH という便利な関数が標準で用意されています。これを使えば、指定したセルが正規表現のパターンに合致するかどうかを判定できます。

よく使う正規表現の例
^:先頭を指定
\d:半角数字
\w:半角英数字

例えば、REGEXMATCH(A2, "^\w{2}-\d{4}") のように記述すれば、複雑なフォーマットチェックも一発です。これをFILTER関数などで囲んで行数を数えれば、どんなに複雑な条件でもカウント可能になります。正規表現は少し学習コストがかかりますが、覚えると手放せなくなる強力なツールですね。

スプレッドシートの特定の文字カウント応用編

特定の文字カウント1

ここからは少し視点を上げて、より複雑なデータ構造や、エラーへの対応方法など、実務で直面しやすい課題を解決するための応用テクニックをご紹介していきます。集計のロジックがしっかり組めると、データの見え方がガラッと変わって面白いですよ。

ARRAYFORMULAで重複を防ぐ

「条件A、または条件Bを満たす」というOR条件でカウントしたい場合、単純にCOUNTIF同士を足し算すると痛い目を見ることがあります。もし、両方の条件を同時に満たすデータがあった場合、2回カウントされてしまう(重複カウント)からです。

この問題をスマートに解決するには、ARRAYFORMULA関数を使って論理演算を行うのがベストです。

=COUNTIF(ARRAYFORMULA((C2:C100="東京") + (D2:D100>5000)), ">0")

このように記述すると、条件を満たす場合は「1」、満たさない場合は「0」として配列内で足し算が行われます。両方満たした場合は「2」になりますが、最後に外側のCOUNTIFで「0より大きい(>0)」ものを1つとして数え上げるため、絶対に重複が発生しないという完璧なロジックです。こういう美しい解決策を見つけると嬉しくなりますね。

複数シートや離れたセル範囲の集計術

データが月ごとに別のシートに分かれている場合、シートが増えるたびに数式を書き換えるのは面倒ですし、ミスの原因になります。

そんな時は、INDIRECT関数を使ってシート名や範囲を動的に指定してしまいましょう。どこかのセルに「1月」「2月」といったシート名のリストを作っておき、INDIRECT関数でその文字を読み込んで参照範囲として組み立てるのです。

また、同じシート内でも離れた列をまとめてカウントしたい場合は、中括弧 {} を使って {A1:A50; C1:C50} のように仮想的な配列を作ってからCOUNTIFにかけることで、一つの数式でスッキリと処理することができます。

関数エラーの原因と根本的な解決策

数式は完璧なはずなのに結果が「0」になったり、「#ERROR!」が表示されたりすると焦りますよね。こういったエラーの大半は、実は関数そのものではなく「データ型」や「目に見えない文字」が原因です。

まず、一番多いのが全角スペースや全角カンマの混入です。スプレッドシートの関数は半角英数記号が絶対ルールなので、これらが一つでも入ると即座にエラーになります。

また、数字が入っているのに表示形式が「テキスト」になっていると、比較演算子(>=など)が機能せず、結果が0になってしまいます。この場合は、表示形式を自動や数値に戻すか、VALUE関数を使って数式内で強制的に数値に変換してあげる必要があります。

データの取り扱いに関する免責事項
ここで紹介している数式や数値データは、あくまで一般的な目安や解決策の一つです。大規模なデータベースや重要な業務システムへ関数を組み込む際は予期せぬ動作を招く恐れがあるため、必ずテスト環境で動作確認を行ってください。正確な仕様についてはGoogleの公式サイトをご確認いただき、システム全体への影響が懸念される場合は専門家にご相談されることを推奨します。

データクレンジングで集計精度を向上

正確なカウント結果を得るための最大の秘訣は、関数をこねくり回すことではなく、実はデータを綺麗にすること(データクレンジング)にあります。

他からコピーしてきたデータには、文字の前後や改行部分に目に見えない空白スペースが潜んでいることがよくあります。これが原因で完全一致のカウントから漏れてしまうのです。

集計をする前に、まずは TRIM関数 を使って不要な空白を取り除いたり、REGEXREPLACE関数 で統一感のない敬称や記号を一掃したりして、データを「均質化」しておくことを強くおすすめします。HTMLのコードを組む前に、不要なタグやクラスを整理しておくのと同じ感覚ですね。下準備をしっかりしておけば、その後の集計が驚くほどスムーズになります。

スプレッドシートの特定の文字カウントまとめ

いかがでしたでしょうか。今回は、スプレッドシートの特定の文字カウントについて、基本的な文字数の算出から、複数条件の指定、大文字小文字の区別、さらには配列や正規表現を用いた高度なテクニックまで幅広く解説してきました。

単純にセルの数を数えるだけなら簡単ですが、目的に応じてLEN関数やSUBSTITUTE関数を組み合わせたり、データの状態に合わせて関数を選び分けたりすることで、どんなに複雑なデータからでも欲しい情報を正確に引き出すことができるようになります。

特に、集計前のデータクレンジングの重要性や、重複を防ぐための論理式の組み方は、一度覚えてしまえば一生使える強力なスキルになるかなと思います。ぜひ今回ご紹介した手法を参考にしていただき、日々のデータ分析や業務効率化に役立ててみてくださいね。

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