和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列の文字数を数える - Len/LenB関数

文字列の文字数を数えるLen/LenB関数の使い方を解説します。

基本構文

Len(対象文字列)

サンプルコード

Dim 文字数 As Long

文字数 = Len("みかん") ' 3
文字数 = Len(Range("A1").Value) ' セル値の文字数

解説

文字列の文字数を数えるにはLen関数を使用します。


単独で使用することはそんなに多くなく、
他の文字列操作関数と組み合わせることが多い関数ですね。

例:「文字列内の特定の文字列より右側」を取得

ある文字列より右側の部分 = Mid(元の文字列, InStr(元の文字列, 検索文字列) + Len(検索文字列))

例:セル内の特定文字列だけを着色する

対象セル.Characters(InStr(対象セル.Value, 着色文字列), Len(着色文字列)).Font.Color = RGB(255, 0, 0)

 

String以外の変数を判定する際は注意

Len関数には「引数がString型でない場合は消費メモリを返す」という仕様があり、
例えばLong型の数値は1でも100000でも「4」を返してしまいます。

Dim 数値 As Long
Debug.Print Len(数値) ' ←いかなる値が入っていようとも4バイトの「4」を返す

 
数値の桁数を取得したいときはそのままでは取得できませんので、
文字列に変換するCStr関数などを用いて対応してください。

Dim 数値 As Long
数値 = 1234567 ' ←これが「7」桁であることを取得したい

Debug.Print Len(数値) ' ← 先ほどの通り「4」
Debug.Print Len(CStr(数値)) ' ← 「7」
Debug.Print Len(数値 & "") ' ← 「7」

 
なお、幸いVariant型はString型として判定してくれますし、
Range型もセル値が数値でも文字列としてカウントしてくれます。

この問題に気を付けなければいけないのは、
LongやDoubleなどの数値だけと思ってもらってOKです。


詳しくはこちらの記事をどうぞ

www.limecode.jp

文字列のバイト数を数える - LenB関数

文字列のバイト数を数える場合はLenB関数を使用します。

例えば「123あいう」を半角3、全角3×2で9とカウントしたい場合です。


ただし、LenB関数はこのままではこのカウントを行ってくれず、
StrConv関数もセットで使用する必要があります。

というのも、VBAにおいて文字コードはすべてUnicode(2バイト)である為、
ただLenB関数を使うと単純にLen関数×2の数値が出てくるだけだからです。
(123あいうは6×2で12となってしまう)


これに対応するためには以下のコードを使用してください。

LenB(StrConv("123あいう", vbFromUnicode))

 
なお、ワークシート関数にも「LENB関数」は存在し、
こちらはそのままでも英数字を1、全角文字を2とカウントしてくれます。

シート関数のLENB関数を使った経験があると、
かえって仕様を勘違いしやすいかもしれませんのでご注意ください。