Len関数の返り値
Len関数の返り値
Len
関数に文字列ではなく数値を渡してしまい、意図しない値が返っていたために小ハマりしてしまったので、反省も込めて覚え書き的に記しておく。
Len関数に数値を渡すとどうなるか
たとえば、次のようなコードの場合。
Dim hoge As Long hoge = -1 Debug.Print Len(hoge)
通常、こんなアホなコードを書くことはないと思うが、初心者だと
Len関数 = 文字数を返す
という強固な思い込みがあるので、下手をすると
Len(hoge)
が、
2
を返す
とか考えてしまわないだろうか。
全然違うのである。
Microsoft Office デベロッパー センター より
Microsoft Office デベロッパー センターの「Len
関数」の項によると、
文字列の文字数、または変数の格納に必要なバイト数を含む長整数型 (Long) を返します。
Microsoft Office デベロッパー センターの「Len
関数」の項より※強調は引用者。
つまり、文字列を渡した場合なら素直に文字数を返してくれるが、文字列以外を渡してしまったら、「変数の格納に必要なバイト数」が返ってしまうのである。
したがって、上掲コードの場合、変数hoge
はLong
型ゆえに、Len(hoge)
は4
を返すことになる。
実験
上記のことを示すためにちょいと実験。
リスト1 標準モジュール
Private Sub test() Dim a As Integer, b As Long, c As Currency a = -1 b = a c = a Dim d As String d = CStr(a) Debug.Print Len(a); Len(b); Len(c); Len(d) End Sub
変数a
はInteger
型、b
はLong
型、c
はCurrency
型にして、全てに-1
を代入。変数d
はString
型にし、-1
をString
型にキャストした上で代入した。
実行結果
イミディエイト・ウインドウの出力は、
ご覧のとおり。
おわりに
「だから何?」とか言われましても……。