大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで文字列の長さを取得する方法についてご紹介します。文字列の長さは、LenもしくはLenBを使えばできます。実用例としては文字数制限や、全角と半角を区別して文字列の長さを取得する。といったものがあります。

はじめに

この記事では文字列の長さを取得するLenとLenBについてご紹介します。

文字列の長さを取得できれば文字数制限などに使うことができます。

全角と半角を区別して文字列の長さを取得するといったこともLenBとStrConvを組み合わせればできます。

この記事で紹介すること

  • 文字列の長さを取得する方法
  • 全角と半角を区別して文字列の長さを取得する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBA関数Lenで文字列の長さを取得

VBA関数の『Len』で文字列の長さを取得することができます。

使う場面としては文字数制限する場合かなと思います。

Lenの基本的な使い方から説明してきます。

半角でためしてみる

では半角の文字列の長さ取得に『Len』を使ってみます。

半角の文字列『"12345"』で文字列の長さを取得するVBAコードです。

Sub TEST1()
    
  Dim A
  
  A = "12345" '半角を入力
  
  MsgBox Len(A) '文字列の長さを取得
      
End Sub

結果としては次のようになります。

半角の文字列の長さを取得した結果

半角の文字列でLenを使う)len1

5文字入っていますので結果は『5』となります。

簡単ですね。

全角でためしてみる

次に全角の文字列の長さをLenを使って取得してみます。

全角の文字列『"あいうえお"』の長さを取得するVBAコードです。

Sub TEST2()
  
  Dim A
  
  A = "あいうえお" '全角を入力
  
  MsgBox Len(A) '文字列の長さを取得
    
End Sub

結果は次のようになります。

全角の文字列の長さを取得した結果

全角の文字列の長さをLenを使って取得した結果)len2

こちらも5文字なので長さは『5』となりました。

数字でためしてみる

続いて数字の桁数をLenを使って取得してみます。

数字『12345』の桁数を取得するVBAコードです。

Sub TEST3()
  
  Dim A
  
  A = 12345 '数字を入力
  
  MsgBox Len(A) '文字列の長さを取得
    
End Sub

結果はこのようになります。

数字の桁数を取得した結果

数字の桁数をLenを使って取得した結果)len3

5桁の数字ですので期待していたとおり『5』を取得することができます。

VBA関数『Len』を使えば文字列の長さや数字の桁数を取得することができます。

ちょっと注意

Lenを使う際にちょっと注意する点があります。

それは変数の型を『Long型』や『Integer型』などを指定すると意図しない長さを取得してしまいます。

例えば変数を『Long型』に指定してみます。

変数には『12345』を入力して長さを取得してみます。

Sub TEST4()
  
  Dim A As Long 'Long型を宣言
  
  A = 12345 '数字を入力
  
  MsgBox Len(A) '文字列の長さを取得
  
End Sub

実行した結果です。

Long型を宣言して桁数を取得した結果

Long型を指定して数字の桁数をLenで取得した結果)len4

結果は『4』となりました。

予期していたのは5桁入力したので『5』ですが、結果は『4』です。

Lenは入れ物の大きさを取得する

当たり前といえば当たり前ではあるのですが、『Len』という関数は変数の型、つまり入れ物の大きさを取得しているからです。

『Long型』の入れ物の型の大きさは『4』なのでどんな値を入力しても『4』となります。

VariantとStringは入れ物の大きさが自動で変わる

では、先ほどの例ではなぜうまく文字列の長さを取得できたかが疑問となります。

変数の型を宣言していないので変数の型が『Variant』になっていたからです。

『Variant』だと入れ物の大きさが入力する値によって自動で変わってくれます。

なので『12345』をいれるとその入れ物の大きさも自動で変わって『5』となってくれます。

あと『String』でも入力した値の長さを自動で変更してくれます。

VariantもしくはStringで宣言する、もしくは変数宣言しないといい

とりあえず難しいことは考えず文字列の長さを意図した値にしたい場合は、なにも宣言しないか、『Variant』もしくは『String』で変数を宣言するといいかと思います。

使う場面

Lenを使う場面としては簡単なところで文字数制限かなと思います。

セルへ入力された値が5文字を超えた場合はメッセージを出すというものです。

'セルが変更された場合に実行する
Private Sub Worksheet_Change(ByVal Target As Range)
    
    '変更されたセルが1行目の1列目だった場合
    If Target.Row = 1 And Target.Column = 1 Then
        
        '文字列の長さが5文字を超えた場合
        If Len(Cells(1, 1)) > 5 Then
        
            MsgBox "5文字を入力してください"
            
        End If
        
    End If
    
End Sub

6文字をセルに入力してみます。

Lenを使って5文字を超えたらメッセージを出す)example1

5文字を超えたのでメッセージが表示されました。

ユーザーに入力してもらう文字数を制限するのに使えるかと思います。

VBA関数LenBで文字列の長さを取得

もう一つ文字列の長さを取得する関数として『LenB』があります。

これは文字列の長さをバイト数で取得できる関数になります。

Lenと基本は同じで、LenBは1文字を2バイトで返すという関数です。

とりあえずLenBはLenの2倍の値が返ってくると覚えているといいかと思います。

LenBの使いどころは半角と全角を区別して長さを取得できるところです。

LenBだけではできませんがStrConvと組み合わせるとできます。

まずは基本的な動きをみてみます。

半角も全角も2バイト

LenBで文字列を取得すると半角も全角も2バイトを返してきます。

やってみます。

まず半角の文字列のバイト数を取得してみます。

半角の文字列のバイト数を取得

半角の文字列のバイト数を取得するVBAコードです。

『"12345"』のバイト数を取得してしてみます。

Sub TEST5()
  
  Dim A
  
  A = "12345" '半角を入力
  
  MsgBox LenB(A) '文字列のバイト数を取得
    
End Sub

実行してみます。

半角の文字列のバイト数を取得した結果

LenBを使って半角の文字列のバイト数を取得した結果)lenb1

『"12345"』で5文字なので『10』バイトが取得できました。

次に全角でやってみます。

全角の文字列のバイト数を取得する

全角の文字列『"あいうえお"』のバイト数を取得するVBAコードです。

Sub TEST6()
  
  Dim A
  
  A = "あいうえお" '全角を入力
  
  MsgBox LenB(A) '文字列のバイト数を取得
  
End Sub

実行してみます。

全角の文字列のバイト数を取得した結果

全角の文字列をLenBで取得した結果)lenb2

『"あいうえお"』で5文字なので半角と同じように『10』バイトが取得できました。

半角でも全角でも同じバイト数が取得できます。

ちょっと注意ですが、変数宣言でLongやIntegerなどを宣言した場合はもちろんバイト数は意図した値になりません。

これはLenと同じです。

とりあえず、変数宣言する場合はVariantもしくはStringで宣言するといいかと思います。

次が、LenBの使いどころです。

全角2バイト、半角1バイトで区別する方法

LenBを使って全角を2バイト、半角を1バイトで区別する方法についてご紹介します。

LenBとStrConvを組み合わせることでできます。

全角を2バイト、半角を1バイトで区別して取得するVBAコードです。

『"あいう123"』のバイト数を取得するコードになっています。

Sub TEST7()
  
  Dim A, B
  
  A = "あいう123" '全角と半角を入力
  
  '文字コードをUnicode⇒Shift-JISへ変換
  B = StrConv(A, vbFromUnicode)
  
  MsgBox LenB(B) '文字列のバイト数を取得
  
End Sub

実行してみます。

LenBとStrConvを使って全角と半角を区別してバイト数を取得した結果)lenb3

『"あいう123"』のバイト数を取得した結果は『9』バイトとなりました。

これは全角3文字+半角3文字なので、2バイト×3+1バイト×3=9バイトという結果になります。

全角は2バイト、半角は1バイトで文字列を取得することができました。

VBAコードの解説

VBAコードの流れとしては次のようになっています。

  • ①StrConvで文字コードをUnicode⇒Shift-JISへ変換
  • ②LenBでバイト数を取得

のような流れです。

手順①:StrConvで文字コードをUnicode⇒Shift-JISへ変換

文字コードをShift-JISへ変換すると全角を2バイト、半角を1バイトとして文字列を取得することができるようになります。

イメージはこんな感じです。

StrConvで文字コードを変更したイメージ)lenb4

難しいことは考えず、とりあえずできるようになります。

ただ変換すると文字化けはします。VBAで文字を認識できなくなりますので。

でも、文字列の長さを取得したいので文字化けしていても大丈夫です。

手順②:LenBでバイト数を取得

Shift-JISへ変換した文字列からLenBでバイト数を取得します。

これで全角を2バイト、半角を1バイトで取得することができます。

『"あいう123"』なので9バイトです。こんな感じです。

LenBで全角と半角を区別して文字列のバイト数を取得)lenb5

これで全角と半角を区別して文字列のバイト数を取得することができます。

さらに応用して全角を2バイト、半角を1バイトとして文字列を切り出すこともできます。

それについては、こちらの記事でまとめています。

使う場面

使う場面としては、文字列の長さでテキストを区切っている場合だと思います。

こんなイメージです。

全角と半角を区別して文字列の長さでデータを区切っている

全角と半角を区別した文字列の長さでテキストを区切っているイメージ)example2

コンマ区切りや半角スペース区切りではなく文字列の長さでテキストを区切っているんですね。

コンマや半角スペースで区切ってほしいではあります。

昔のソフトとかだとこのようなテキストファイルで出力するといったものも残っているので紹介したVBAコードが参考になるかと思います。

おわりに

この記事では文字列の長さを取得するLenとLenBについてご紹介しました。

文字列の長さを取得できれば文字数制限などに使うことができます。

全角と半角を区別して文字列の長さを取得するといったこともLenBとStrConvを組み合わせればできます。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す