セル内をカウントする


セル内に、任意の文字が含まれているかどうかは、FIND関数やSEARCH関数で分かります。詳しくは、下記ページをご覧ください。

セル内を検索する

FIND関数やSEARCH関数は、検索する文字が何文字目にあるかを教えてくれます。存在しないとエラーになる特性を利用して、そもそも含まれているかどうかを判定することも可能です。しかし、その文字がいくつあるかという個数までは分かりません。セルに入力されている文字列の中に、任意の文字がいくつあるかを調べるには、どうしたらいいでしょう。

上図は、実際に質問されたケースです。A列に商品番号が入力されています。商品番号は原則として「ABC-123-4」のように、3つのデータがハイフンで結合されています。しかし、中には「ABC-123」など3つめのデータが存在しない場合もあります。ちなみに質問された事例では、3つめのデータ(ここでは4)は商品の在庫数であり、「ABC-123」のように入力されていない場合は○個とする、みたいなルールがあるそうです。もちろん「ABC」や「123」部分の文字数は決まっていないと。

そもそも、商品番号に在庫数のデータを含めることが問題なのですが、まぁ、それは置いておいて。この事例では「ハイフンがいくつあるか」によって、計算を分けなければなりません。はい、前置きが長くなりましたが、ここではそうした「任意の文字をカウントする」方法を解説します。

ちなみに、そんな関数はありません。あれば便利だと思いますが、おそらく今後も追加されることはないでしょう。であれば、何とかするしかありません。こんなときはアイデア勝負です。

「ABC-123-4」は全部で9文字です。これはLEN関数で分かります。では、この「ABC-123-4」から「-」をすべて除去したらどうでしょう。「ABC1234」は全部で7文字になります。最初の9文字と、「-」を除去した7文字の差は「2」です。これって「-」の数ですよね。

セルに入力した文字列から、任意の文字を除去するには、どうしたらいいでしょう。これにはSUBSTITUTE関数を使います。こんなとき、VBAだったらReplace関数ですよね。ワークシート関数にも、同じ名前のREPLACE関数がありますけど、このREPLACE関数は「指定した位置」にある文字を別の文字に置換する関数です。VBAのReplace関数とは動作が異なりますし、今回の用途には不向きです。

整理して考えてみましょう。

元の文字数 - 除去後の文字数 = 「-」の数

LEN(元の文字列) - LEN(除去後の文字列) = 「-」の数

LEN(元の文字列) - LEN(SUBSTITUTE(元の文字列, "-", "")) = 「-」の数

LEN(A2) - LEN(SUBSTITUTE(A2, "-", "")) = 「-」の数

ここでは、セル内に入力した文字列中に、任意の文字がいくつあるかを調べる方法を解説しました。

数式は作るものです。あなたのやりたい計算を、一発でかなえてくれる関数など、そうそう存在するはずがありません。だから、関数を組み合わせて、数式を作るのです。そのためには何より「関数は組み合わせるものだ」という強い認識と、実際に組み合わせるトレーニングが必要です。がんばってくださいね。