【VBA】Dim str As String * 10の意味(固定長の文字列)
「Dim str As String * 10」のような変数宣言を見たことがありますか?
最近、このようなコードを見て面食らいました。
String * 10は最大長が10文字の文字列であることを示しています。
今回はこの変数宣言がどのようなものか解説します。
(固定長の文字列)String * 10のメリット
通常、VBAで文字列型の変数を宣言する場合、可変長の文字列として宣言されます。
つまり、文字列の長さは必要に応じて変更することができます。
一方、"Dim str As String * 10″のように固定長の文字列として宣言すると、その文字列は常に10文字の長さとなります。
このような固定長文字列は、文字数が固定されていてパフォーマンスが向上する場合や、外部APIとのデータのやり取りで使用されることがあります。
また、固定長文字列は通常の可変長文字列よりも少しメモリを節約する傾向があります。
(固定長の文字列)String * 10の注意点
文字列の長さが一定になる(Len関数)
Sub StringLength()
'''文字列の長さ
'''何も代入せずともLenの長さは一定
Dim str As String * 10
Debug.Print Len(str) '10
str = "あいうえお"
Debug.Print Len(str) '10(5文字を代入しても変わらない)
End Sub
通常、Len関数は文字列の長さを確認するために使用します。
しかし固定長文字列だと代入した文字列に関係なく、Len関数が一定の値を返します。
そのため、代入した文字列の長さが知りたいという時にLen関数が使えません。
長さ以上の文字列を代入すると
Sub OverLength()
'''長さ以上の文字列を代入するとどうなるか
Dim str As String * 26
str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Debug.Print str 'abcdefghijklmnopqrstuvwxyzABCD
End Sub
固定長の文字列には、文字数よりも少ない文字列を割り当てることも可能ですが、それを超える文字列を割り当てようとすると末尾が代入されません。
実行時エラーにはならないので、代入する文字長さが正しいか確認するようにしましょう。