【Excel VBA】文字列の長さを取得する(Len/LenB)

はじめに

今回は、文字列の長さを取得する方法について解説します。
文字列の切り取りを実施する場合や、ファイルサイズの予測などで、文字列の長さを取得する場合も多いかと思います。
本記事では、文字列の長さを取得する 2種類の方法について、注意点も詳しく解説したうえでご紹介します。

この記事を読むメリット
  • 文字列の長さを取得する 2つの方法が分かります。
  • 取得における注意点についても解説します。
  • コピペで使える実践的なサンプルコードを掲載しています。

前提

文字列の長さの注意点

文字列の長さを取得する方法として、以下の2つがあります。
それぞれ、イメージ付きで解説します。

文字数を数える方法

タイトルの通り、文字の数を数える一般的な方法です。
以下の文字列を 4とカウントします。

文字数の数え方
文字数の数え方
めい

なんで例が「3年B組」なの…?

りゅう

半角と全角が混ざった文字列を考えたときに真っ先に思いついたんだ。
完全に「世代」だね。

バイト数を数える方法

文字数を数える方法とは別に、文字のバイト数で数える方法もあります。
基本的に、半角文字を 1バイト全角文字や漢字は 2バイト以上としてカウントします。
※全角や漢字は「マルチバイト文字」と呼ばれます。

テキストファイルに出力する際、以下は 6バイトとしてカウントします。

バイト数の数え方
バイト数の数え方
りゅう

全角文字や漢字は、基本的に2バイトとして扱われますが、
文字によっては3バイトや4バイトとして扱う文字もあります。

基本情報

Len関数

文字数をカウントする場合は、Len関数を使用します。
戻り値としては、整数値として文字数が返却されます。

構文

構文

Len(文字列)

LenB関数

バイト数をカウントする場合は、LenB関数を使用します。
戻り値としては、整数値としてバイト数が返却されます。

構文

LenB(文字列)

LenB関数の使用における注意点
Excel VBAでは、文字コードは Unicodeとして扱われます。
Unicodeは、2バイトで扱われるため、半角文字も 2バイトとして扱われます。
対策としては、StrConv関数にて、Unicodeからシステム規定の文字コードへの変換をしたうえで利用しましょう。

【対応策】
StrConv(LenB(文字列), vbFromUnicode)

りゅう

Mid関数などで「文字の位置」を指定する場合には、バイト数ではなく文字数を指定しましょう。

サンプルコード

文字数とバイト数を取得してセルに書き出す

サンプルコード
Public Sub getStrLength()
    Dim str As String               ' 文字列
    Dim strLen As Integer           ' 文字数
    Dim byteLen As Integer          ' バイト数
    Dim currentRowIndex As Integer  ' カレント行Index
    Dim endRowIdex As Integer       ' 最終行Index

    ' 最終行取得
    endRowIdex = ActiveSheet.UsedRange.Rows.Count

    For currentRowIndex = 2 To endRowIdex

        ' 文字列取得
        str = Cells(currentRowIndex, 2)

        ' 長さの取得
        strLen = Len(str)                           ' 文字数
        byteLen = LenB(StrConv(str, vbFromUnicode)) ' バイト数
    
        ' 長さの書き出し
        Cells(currentRowIndex, 3).Value = strLen
        Cells(currentRowIndex, 4).Value = byteLen
    Next currentRowIndex
End Sub

実行結果(クリックで拡大されます)

実行前
実行後

最後に

今回は、文字列の長さを取得する方法について解説しました。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA