半角0.5、全角1文字でカウントする関数
Googleスプレッドシートを使用していると半角を0.5文字、全角を1文字でカウントしたいことがある。
しかし、Googleスプレッドシートにはそのような関数は存在しない。
LENB関数があるではないかと思う人もいるかもしれないが、LENBだと全角カナと全角カナの1文字を2で返してしまう。
文字列 | LENB |
---|---|
ハローWorld | 11 |
ハローWorld | 11 |
そのため、半角0.5、全角1文字でカウントする関数は自分で作成する必要がある。
文字をカウントする関数の作成方法
まずGoogleスプレッドシートのツール => スクリプトエディタを選択する。
スクリプトエディタを開いたら以下のコードを貼り付けて保存すれば半角0.5、全角1文字でカウントするLENC関数が使用できるようになる。
function LENC(str) { var x = str.replace(/[。-゚]/g, 'x'); var hex = ''; for (var i = 0; i < x.length; i++) { hex += x.charCodeAt(i).toString(16); } return hex.length / 4; }
コードを解説すると、半角カナは全角カナと区別されないため、すべてxに置換して、文字列の1つずつの文字をcharCodeAt(i).toString(16)でUTF-16の16進数のコードに変換。
これを4で割れば半角0.5、全角1文字をして値を返すことができる。
String.prototype.charCodeAt() - JavaScript | MDN
Googleスプレッドシートで半角0.5、全角1文字でカウントする関数のサンプル