VB6・VBA関数メモ:Len関数

Len関数についてメモしておきます。
文字数をカウントする関数として知られていると思いますが、
実は数値型や構造体の変数のバイト数を調べたりもできたりします。

ただ、バイト数をカウントするLenB関数もあるので、
文字数をカウントする場合は「Len関数」、
バイト数をカウントする場合は「LenB関数」と使い分けた方が良いかと思います。

下記ではヘルプにない例もいろいろと動作検証してみました。


概要

Len(Expression)
機能 文字列を指定した場合は文字数を返す
または変数のバイト数を返す
戻り値 指定文字列の文字数
または変数のバイト数
指定値がNULLの場合はNULL


引数

引数名説明
Expression 対象文字列
または対象となる変数


使用例

説明記述例出力
文字列の文字数を取得 Len("abcde") 5
文字列の文字数を取得
(2バイト文字も1文字とカウント)
Len("あiうeお") 5
変数のバイト数を取得
Dim val As Integer
Debug.Print Len(val)
2
文字列型にサイズを指定した場合は
指定した文字数を返す
Dim val As String * 10
val = "abc"
Debug.Print Len(val)
10
構造体の変数のバイト数を取得
(各要素のバイト数の合計を返す)
Type tySumple
    abc As Integer
    def As Integer
    ghi As Integer
End Type

Sub Sumple()
    Dim val As tySumple
    Debug.Print Len(val)
End Sub
6
Null指定の場合はNullを返す Len(Null) Null


動作検証(ヘルプにない例)

説明記述例出力
列挙体の変数のバイト数を取得
(おそらくLong型のバイト数を返す)
Enum enSumple
    abc
    def
    ghi
End Enum

Sub Sumple()
    Dim val As enSumple
    Debug.Print Len(val)
End Sub
4
Variant型の場合、
数値や日付でも文字列として扱われる
Dim val As Variant
val = 12345
Debug.Print Len(val)
5
オブジェクトや配列のバイト数は取得できない
Dim val As Object
Debug.Print Len(val)
エラー
構造体内にオブジェクトや配列があっても
エラーにはならない
(※内容に関係なく4バイトとして扱われる?)
Type tySumple
    abc   As Object
    def   As clsSumple '独自クラス
    ghi() As Integer
End Type

Sub Sumple()
    Dim val As tySumple
    Debug.Print Len(val)
End Sub
12
構造体内の配列は要素数を固定すれば
バイト数を取得できる
Type tySumple
    abc(1 To 3) As Integer
End Type

Sub Sumple()
    Dim val As tySumple
    Debug.Print Len(val)
End Sub
6
構造体内の文字列型は場合、
4バイトとして扱われる(?)
Type tySumple
    abc As String
End Type

Sub Sumple()
    Dim val As tySumple
    Debug.Print Len(val)
End Sub
4
構造体内の文字列型は、
文字列型のサイズを指定すれば指定した文字数数を取得できる
Type tySumple
    abc As String * 10
End Type

Sub Sumple()
    Dim val As tySumple
    Debug.Print Len(val)
End Sub
10
まとめ ・列挙体はLong型として扱われる(たぶん)
・Variant型は文字列として扱われる
・オブジェクトのバイト数は取得できない
・配列のバイト数は構造体内に定義し
 サイズを固定にすれば取得できる
・構造体内の文字列型の文字数は宣言時に
 サイズを固定にすれば取得できる
 


コメント
コメントする








    
この記事のトラックバックURL
トラックバック