このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】Dim str As String * 10の意味(固定長の文字列)

「Dim str As String * 10」のような変数宣言を見たことがありますか?

最近、このようなコードを見て面食らいました。

String * 10は最大長が10文字の文字列であることを示しています。

今回はこの変数宣言がどのようなものか解説します。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらうのはいかがでしょうか?
マクロの作成請負をしていますので、こちらからご相談ください。

(固定長の文字列)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

固定長の文字列には、文字数よりも少ない文字列を割り当てることも可能ですが、それを超える文字列を割り当てようとすると末尾が代入されません。

実行時エラーにはならないので、代入する文字長さが正しいか確認するようにしましょう。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらうのはいかがでしょうか?
マクロの作成請負をしていますので、こちらからご相談ください。

VBA

Posted by やろまい