いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)COUNTIF関数でワイルドカードを使ってカウントする

 ExcelのCOUNTIF関数で条件を指定する際にワイルドカードを使う例についてです。「~を含む文字列」とか「~で終わる文字列」といった条件に対応する文字列をカウントすることができ、あいまい検索などとも呼ばれます。使い方によっては複雑なカウントも簡単にできます。

~を含む(部分一致)条件の例

 次の画像内の左側の表には、市町村の名前が記録されています。
 そこでD3セルにCOUNTIF関数とワイルドカードを使った式を入力し、「山」の字を含む市町村の数をカウントしています。

 D3セル

=COUNTIF(B3:B12,"*山*")

 「*」という文字が「0文字以上の任意の文字」を意味するワイルドカードです。
 つまりその位置(この例では「山」の前後)に文字が何文字あってもよく、なくてもいいということなので、「山」で始まる文字列や「山」で終わる文字列、中間に「山」を含む文字列のいずれも条件に該当します。「山」という1文字でも該当します。
 このデータでは「山県市」「亀山市」「大阪狭山市」「山添村」が該当し、結果は「4」となります。



 次の画像でも同じ内容のカウントを行っていますが、条件の文字(山)をD3セルから参照しています。
 式の記し方に注意が必要です。

 E3セル

=COUNTIF(B3:B12,"*"&D3&"*")

 第2引数(検索条件)を「"*D3*"」とすると「『D3』という文字を含む文字列」と解釈されてしまいうまくいきません。
 そこでセル参照の「D3」は「" "」の中に入れず、さらに&でつなぐ必要があります。
 これは以降の各種の条件についても同様です。

~で始まる(前方一致)条件の例

 次の画像では、「山」の字で始まる市町村の数をカウントしています。

 D3セル

=COUNTIF(B3:B12,"山*")

 「山」の字の後ろにだけ「*」のワイルドカードが付いています。
 「山」の前には1文字もあってはならず、「山」の後には何文字あっても(なくても)よいので、つまり「『山』で始まる文字列」という条件になります。
 該当するのは「山県市」「山添村」の2つなので結果は「2」となります。

~で終わる(後方一致)条件の例

 次の画像では「村」の字で終わる市町村、つまり村の数をカウントしています。

 D3セル

=COUNTIF(B3:B12,"*村")

 「村」の字の前にだけ「*」のワイルドカードが付いています。
 「村」の前には何文字あっても(なくても)よく、「村」の後には1文字もあってはならないことになるので、つまり「『村』で終わる文字列」という条件になります。
 該当するのは「豊根村」「山添村」の2つで、結果は「2」となります。

文字数を指定する例

 次の画像では、2文字の市(最後の「市」以外に2文字)の数をカウントしています。

 D3セル

=COUNTIF(B3:B12,"??市")

 ここでは「?」というワイルドカードを使っています。これは「任意の1文字」を意味します。つまりその位置に文字が1つなければなりません。
 よって「"??市"」とすることで2文字の市だけが条件に該当します。
 該当するのは「山県市」「亀山市」「舞鶴市」なので、結果は「3」となります。



 また、次の画像では「2文字以上の市」をカウントしています。

 D3セル

=COUNTIF(B3:B12,"*??市")

 「*」と「?」の両方のワイルドカードを使っています。「市」の前に「?」が2つあるのでそこに2つの文字がなければならず、さらに「*」も含まれているのでそれ以上に何文字あってもかまいません。結果的に2文字以上の市という条件になります。
 なお「*」の位置はどこでもよく、「"?*?市"」や「"??*市"」としても同じです。
 逆に「~文字未満」という条件の場合は、否定を表す演算子「<>」(下記参照)を使います。ただし否定を使う場合には条件の意味を誤りやすいので注意が必要です。

「~を含まない」や「~以外」の例

 次の画像では「山」の字を含まない市町村をカウントしています。

 D3セル

=COUNTIF(B3:B12,"<>*山*")

 最初の例でみたように第2引数(条件)を「"*山*"」とすることで「『山』を含む」という条件になります。これに否定の演算子「<>」を併せて使うことで「『山』を含まない」という条件になります。



 次の画像では「<>」を使って「市」の字以外で終わる市町村、つまり町村の人口の数をカウントしています。

 D3セル

=COUNTIF(B3:B12,"<>*市")

 「"*市"」だと「『市』で終わるもの」という意味なので、「<>」を加えることにより「『市』で終わるもの以外」つまりこのデータでは町村が条件に該当することとなります。


 なお、条件によっては「<>」を使ったときに意味を間違えやすいので注意が必要です。
 例えば上の例でみたように「"*??市"」は「(最後の「市」以外に)2文字以上の市」を意味します。これの否定形は「"<>*??市"」となりますが、その意味は「2文字未満の市」ではなく「全体から2文字未満の市を除いたもの」つまり「町村または2文字未満の市」となります。

数値・日付をカウントする場合

 基本的にワイルドカードは文字列にしか適用できず、数値や日付をカウントしようとしても「0」になってしまいます。
 しかしどうしてもワイルドカードでカウントしたい場合の対応について、次の記事で紹介しています。

www.officeisyours.com