関数・メソッド

文字列の長さを取得する【Len関数】【LenB関数】【ExcelVBA】

構文

Len(Expression) As Variant

LenB(Expression) As Variant

Expression・・・文字数を取得したい「文字列」・「値」を指定します。
戻り値 ・・・Variant
変数や文字列の文字数を抜き出しします。

LenB関数はバイト数単位の抜出だが、注意が必要

ワークシート関数のLenB関数(Shift-JIS形式)
→半角文字を1Byte、全角文字を2Byteとして取得。
VBA関数のLenB関数(DBCS形式)
→半角文字を2Byte、全角文字を2Byteとして取得。

LeftB関数/RightB関数/MidB関数と同じ考えですね。

Len関数、LenB関数のサンプルコード

Public Sub test_len_lenB()
    
    '■半角文字のみの場合
    MsgBox Len("123")   '3
    MsgBox LenB("123")  '6(1バイト文字でも2バイト換算)
    
    '■全角文字のみの場合
    MsgBox Len("あいうえお")   '5
    MsgBox LenB("あいうえお")  '10(1バイト文字でも2バイト換算)
    
    '■半角/全角混在の場合
    MsgBox Len("あいうえお123")   '8
    MsgBox LenB("あいうえお123")  '16(1バイト文字でも2バイト換算)
    
    
    '■正しくバイト数を取得したい場合は、Shift-JIS形式に変換する
    MsgBox LenB(StrConv("123", vbFromUnicode))          '3
    MsgBox LenB(StrConv("あいうえお", vbFromUnicode))   '10
    MsgBox LenB(StrConv("あいうえお123", vbFromUnicode)) '13
    
End Sub


注意点

  • バイト数で取得する(LenB関数)場合、且つ全角文字がある場合は注意が必要です。
    ■LenB関数の注意点
    DBSC→Shift-JISに変換しないと使用できない
    Shift-JISに変換しても全角文字が含まれる、且つ文字数が奇数の場合は注意必要
  • プログラム上はそのままLenB関数を使用するのは辞めた方が望ましいでしょう。
    (StrConv関数で変換をお勧めします)
    また、Len関数とLenB関数を併用するのもコードの可読性が落ちるので併用はおすすめしません。
  • ワークシート関数のLenB関数はShift-JIS形式で取得します。

関連記事

文字列の左端から一部を取得する【Left関数】【LeftB関数】【ExcelVBA】
文字列の右端から一部を取得する【Right関数】【RightB関数】【ExcelVBA】
文字列の任意の位置から 一部の文字列を取得する【Mid関数】【MidB関数】【ExcelVBA】

コメント

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