今回は、文字列の長さを取得する方法について解説します。
文字列の切り取りを実施する場合や、ファイルサイズの予測などで、文字列の長さを取得する場合も多いかと思います。
本記事では、文字列の長さを取得する 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
実行結果(クリックで拡大されます)
最後に
今回は、文字列の長さを取得する方法について解説しました。
本記事が、皆さんのお力になれば幸いです!
コメント