VBAには型宣言記号による型宣言方法が存在する

型宣言記号?

カルチャーショックという程でもないけど、VBAには古いVBの名残り?として「型宣言記号」というものが存在した。VBAを勉強して数年は経っているにも関わらず知らなかった。軽く後頭部を叩かれたような気分になったので、メモることにした。

Option Explicit

''型宣言記号の確認コード
Sub TypeSymbol()

    ''文字列型
    Dim ss As String
    Dim ss_$ 'ドルマーク
    
    ''整数型
    Dim n As Integer
    Dim n_% 'パーセント
    
    ''長整数型
    Dim l As Long
    Dim l_& 'アンパサンド
    
    ''単精度浮動小数点型
    Dim f As Single
    Dim f_! 'エクスクラメーション
    
    ''倍精度浮動小数点型
    Dim d As Double
    Dim d_# 'シャープ
    
    ''通貨型
    Dim m As Currency
    Dim m_@ 'アットマーク
    
    ''バリアント型
    Dim v As Variant
    Dim v_ '型宣言記号をつけない
    
    ''型確認
    Debug.Print TypeName(ss) ' String
    Debug.Print TypeName(ss_$) ' String
    
    Debug.Print TypeName(n) ' Integer
    Debug.Print TypeName(n_%) ' Integer
    
    Debug.Print TypeName(l) ' Long
    Debug.Print TypeName(l_&) ' Long
    
    Debug.Print TypeName(f) ' Single
    Debug.Print TypeName(f_!) ' Single
    
    Debug.Print TypeName(d) ' Double
    Debug.Print TypeName(d_#) ' Double
    
    Debug.Print TypeName(m) ' Currency
    Debug.Print TypeName(m_@) ' Currency
    
    Debug.Print TypeName(v) ' Empty
    Debug.Print TypeName(v_) ' Empty

End Sub

上記コードでは各種型別に、通常の方法と型宣言記号による方法の2パターンの変数を記述した。型宣言記号は宣言した変数に続き付加する。例で用いた宣言方法の場合、変数名と型宣言記号の間にアンダーバーが含む。これは違いを区別するために使用しているだけである。本来つける必要はない。つまり文字列型の場合、ss$と記述して良い。

後半は、宣言した変数の型確認をおこなっている。見事に同じ型名が返ってくる。それ以上の発見は無かったが、まだまだ知らないことがたくさんあることを実感した。

ところかわり・・・

さて、型宣言記号の存在を知らなかったわけだが、知ったところでコードに優位性が生まれる気がまったくしなかった。もちろん記号による省略でコード記述量が減るため、負担軽減と時間短縮には貢献するのだろう。しかしこの記述方法は使用することによりコードの可読性を低下させる可能性がある。結果として負担が増えるのでは?と疑問を感じた。

これは今よりもコンピュータに積むメモリが少なかったことに起因しているように思う。VBAの登場は1994年前後。その頃は2~8MBぐらいが主流。メモリリソースがシビアだったころの面影かな?

ひとりでコードを書くならば、ちょっと特殊なコードを書いて「オレ、かっこいい!」みたいな中二病的自意識過剰自己満足全開でもよいだろう。しかし2020年代はプログラミング人口が増え始めると想定される。誰もがプログラムを書く時代になろうとしている。そして、いつ誰が自分のコードを参考にするか分からない。その時、合理的で読みやすい整った平均的なコードであれば、それを真似てより良いコードを書く人が増えるのではないだろうか。

何はともあれ、嫌われプログラミング言語No.1の汚名を持つVBA(VB)を題材にこんなことを書いている時点で、説得力はあまり感じてもらえないだろう。Officeのデファクトスタンダード言語かもしれないけど、将来はモダンな言語へ移行をお願いしたいところです。