(Gスプレッドシート)LEN関数で文字数をカウントする

 Googleスプレッドシートでセル内の文字数を数えるのに用いるLEN関数の使い方についてです。

  • 「=LEN(文字列)」という式により、文字列の文字数を数えることができます。
  • 全角と半角の区別なく文字をカウントします。スペースや各種記号、改行も1文字としてカウントされます。

基本的な使用例

 もっとも単純な使用例です。
 C3セルに式を入力して、B3セル内の文字の数を数えています。

 C3セル

=LEN(B3)

 引数は1つだけでとても単純です。


 次の画像では、同様の式によりいろいろな文字列の文字数をカウントしています。
 全角・半角を問わず1文字としてカウントされ、記号も1文字としてカウントされます。なお画像にはありませんが、数値や日付も見たままの文字数でカウントされます。
 特に注意が必要なのは改行が1文字としてカウントされることで、見落としやすい点です。

注意点:表示形式の設定により表示される文字をも数える

 次の画像のB3セルには「1234567」という7桁の数値が入力されていますが、セルの表示形式の設定によりカンマ付きで表示されています。
 これに対し「=LEN(B3)」という式を実行すると結果はカンマの数を含む「9」となります。LEN関数に限らず、Googleスプレッドシートの文字列関数(SUBSTITUTE関数など)は表示形式により付加された文字(リテラル)込みで値を評価します。いずれExcelとは異なる仕様のため注意が必要です。

特定の文字(以外)をカウントする例

 まずは特定の文字以外をカウントする例です。
 次の画像では、SUBSTITUTE関数などで特定の文字を削除し、その結果に対しLEN関数を適用しています。

 C3~C5セル(全角スペース以外/ダッシュ・ピリオド・半角スペース以外/改行以外をカウント)

=LEN(SUBSTITUTE(B3," ","")) 
=LEN(REGEXREPLACE(B4,"['. ]",""))
=LEN(SUBSTITUTE(B5,CHAR(10),""))

 除く文字が1種類だけの場合はSUBSTITUTE関数を使っていますが、複数の場合はREGEXREPLACE関数でまとめて削除するのが便利です。
 REGEXREPLACEは非常に強力で、応用すれば「特定の文字だけ数える」「英字だけ数える」といったことも可能です。ここでは詳しくは触れませんが、次の記事で紹介しています。

www.officeisyours.com

www.officeisyours.com


範囲内の文字数の合計を求める例

 こちらは、一定のセル範囲の文字数の合計を求める例です。
 上記のように各セルごとに求めてから合計してもよいのですが、ここでは1つの式にまとめています。

 D3セル

=SUM(ARRAYFORMULA(LEN(B3:B8)))

 いったんすべてのセルをLEN関数でカウントしますが、複数のセルを対象とするためARRAFORMULA関数で囲み(これがないと最初のB3しかカウントできない)、その結果をSUM関数で囲んでいます。
 文字列を連結して数える方法、つまり「=LEN(CONCATENATE(B3:B8))」とする方法も考えられますが、文字を連結した時点で数万字に達するとエラーになってしまうので、上記のようにした方が無難です。


応用例

入力文字数に応じて警告・制限する例

 具体的な利用例として、入力文字数の上限を守らせるために用いる例が考えられます。
 次の画像は、入力された文字数が35を超えたらメッセージを表示するという例です。

 D3セル

=IF(LEN(B3)>35,"制限字数を超えています","")

 これは単に警告を出しているだけなので容易に突破されますが、データの入力規則に式を組み込んで入力を受け付けないようにすることも可能です。

文字列を1文字ずつ分割する例

 ちょっと難度が高くなりますが、MID関数などを使って文字列を1つずつ分割し、各セルに表示させる例です。
 ここでもLEN関数を使用しています。

 D3セル

=ARRAYFORMULA(MID(B3,SEQUENCE(1,LEN(B3)),1))

 重要なポイントは「SEQUENCE(1,LEN(B3))」の部分です。これは「1から文字数までの連番」です。これをMID関数の第2引数(~文字目から取得)とすることより「1文字目から1文字」「2文字目から1文字」……「最後の文字(文字数番目)から1文字」を一括して得ることができます。
 ここでもARRAYFORMULAが必要になり、式がやや複雑になります。