Len は「文字列が何文字あるか」を教えてくれるメジャー
Len 関数は、文字列の「長さ(文字数)」を調べるための関数です。
イメージとしては、文字列にメジャーを当てて「何文字ぶんある?」と測る道具です。
VBAでは、
n = Len(文字列)
VBと書くと、その文字列が何文字かを数えて、結果を数値で返してくれます。
この「文字数」が分かると、あとで Left / Right / Mid で切り出すときに、
「どこからどこまで切るか」を柔軟に決められるようになります。
Len の基本的な使い方と動き
文字列変数に対して使う
一番シンプルな例から見てみます。
Sub SampleLenBasic()
Dim s As String
Dim n As Long
s = "ExcelVBA"
n = Len(s)
MsgBox "文字数は " & n & " 文字です。"
End Sub
VBこの場合、s は "ExcelVBA" なので、Len(s) は 8 を返します。
メッセージボックスには「文字数は 8 文字です。」と表示されます。
ここでのポイントは、
- Len は「文字列そのもの」を見ている
- 結果は必ず「数値(Long)」で返ってくる
ということです。
直接文字列リテラルに使うこともできる
変数に入れなくても、直接書いてもOKです。
Sub SampleLenLiteral()
MsgBox Len("ABC") ' → 3
MsgBox Len("山田太郎") ' → 4
End Sub
VB「山田太郎」は4文字なので、Len(“山田太郎”) は 4 になります。
全角・半角に関係なく、「1文字は1カウント」です。
Len が本当に役立つのは「他の関数と組み合わせたとき」
右端から「最後の n 文字」を取りたいとき
例えば、「商品コードの最後の3文字だけ取りたい」とします。
Sub SampleLenRight()
Dim code As String
Dim last3 As String
code = "ABC-00123"
last3 = Right(code, 3)
MsgBox last3 ' → "123"
End Sub
VBこれは Len を使わなくても書けますが、
「右から“固定の3文字”」だからです。
では、「右から“最後の1文字だけ除いた残り全部”」を取りたいときはどうでしょう?
Sub SampleLenRight2()
Dim code As String
Dim body As String
code = "ABC-00123"
body = Left(code, Len(code) - 1)
MsgBox body ' → "ABC-0012"
End Sub
VBここでは、
- Len(code) で「全体の長さ」を調べる
- そこから 1 を引いた長さぶんだけ Left で切り出す
という形で、「最後の1文字を除いた部分」を取り出しています。
このように、Len は「どこまで切るか」を計算する材料としてよく使われます。
Mid と組み合わせて「後ろから数えて n 文字目から m 文字」もできる
例えば、「右から3文字目から2文字取りたい」とします。
文字数が毎回違う場合、Len がないと計算が面倒です。
Sub SampleLenMid()
Dim s As String
Dim part As String
Dim startPos As Long
s = "ABCDEFG"
' 右から3文字目 → 全体の長さ - 3 + 1
startPos = Len(s) - 3 + 1
part = Mid(s, startPos, 2)
MsgBox part ' → "EF"
End Sub
VBここでの計算は、
- 全体の長さ:Len(s) = 7
- 右から3文字目の位置:7 – 3 + 1 = 5
- 5文字目から2文字 → “EF”
という流れです。
「右から何文字目」という指定は、
Len を使って「左から何文字目か」に変換してあげると、Mid で素直に書けます。
Len と Trim を組み合わせて「余計な空白」を意識する
前後のスペースを含めるかどうか
Len は、その文字列に含まれる文字を「全部」数えます。
当然、スペースも1文字としてカウントされます。
Sub SampleLenSpace()
Dim s As String
s = " Excel " ' 前後にスペースあり
MsgBox Len(s) ' → 7(スペース込み)
MsgBox Len(Trim(s)) ' → 5(前後のスペース除去後)
End Sub
VBここでのポイントは、
- 「見た目には分かりにくいスペース」も Len はちゃんと数える
- 比較や判定をするときは、Trim で前後のスペースを消してから Len することが多い
ということです。
例えば、「入力されているかどうか」をチェックするとき、
If Len(Range("A1").Value) = 0 Then
' 何も入っていない
End If
VBだと、「スペースだけ入っている」場合も「何か入っている」と判定されます。
それを避けたいなら、
If Len(Trim(Range("A1").Value)) = 0 Then
' 実質的に空(スペースだけのケースも含めて空とみなす)
End If
VBのように、Trim とセットで使うのが定番です。
Len は「バイト数」ではなく「文字数」を返す
全角・半角の混在でも「1文字は1カウント」
VBAの Len は、「バイト数」ではなく「文字数」を返します。
Sub SampleLenMultiByte()
Dim s As String
s = "AあBい"
MsgBox Len(s) ' → 4
End Sub
VB半角の A, B も、全角の あ, い も、
どちらも「1文字」としてカウントされます。
もし「バイト数」が欲しい場面(Shift-JISで何バイトか、など)が出てきたら、
LenB という別の関数を使いますが、
超初心者の段階では「Len は“文字数”」だけ覚えておけば十分です。
まとめ:Len は「文字列操作のスタート地点」を決める道具
Len の本質は、
「この文字列は何文字あるのか?」
「どこまで切り出せばいいのか?」
を決めるための“ものさし”です。
押さえておきたいポイントをコンパクトにまとめると、
Len(文字列) は、その文字列の「文字数」を返す
全角・半角に関係なく、1文字は1カウント
Left / Right / Mid と組み合わせて「どこまで切るか」を計算するのに超便利
Trim と組み合わせると、「実質的に空かどうか」の判定が安定する
