Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Len

Excel VBA VBA
スポンサーリンク

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 と組み合わせると、「実質的に空かどうか」の判定が安定する

タイトルとURLをコピーしました