【Excel VBA】変数を纏めて宣言できるか?

Excel マクロ(VBA)

VBAをはじめとするプログラミングにとって、変数は避けて通れない要素です。VBAにおいては、変数名と変数の型を事前に宣言しますが、変数を纏めて宣言したい、と考えたことがある人も多いのではないでしょうか。今回は、変数を纏めて宣言できるかどうかを検証します。

なお過去に、変数とは何か、変数の型とは何かを解説しています。過去の記事は以下を参照ください。

スポンサーリンク

変数の宣言とは

そもそも変数の宣言とは、プログラム内で使用する変数の名前と型を事前に定義するプロセスです。これにより、プログラムがより安全に、効率的に動作するようになります。VBAでは、”Dim”というステートメント(コード)によって変数を宣言します。

例えば、最終行を整数で取得するlastRowという整数型の変数は、以下のように宣言できます。

Dim lastRow As Long

こうすることで、後述の処理で変数lastRowが登場しても、プログラムは”この変数は整数を扱うためのもの”であると明確に判断して処理することができるのです。

変数の役割を明確化することでエラーを回避することができる変数の宣言ですが、プログラム内で使用する変数が多くなり、かつそれらを1つずつ宣言すると、以下のようにコードが冗長になります。

Dim lastRow As Long

Dim i As Long

Dim k As Long

Dim j As Long

Dim counter As Long

Dim userName As String

Dim areaName As String

Dim productName As String

Dim areaList As Variant

Dim productList As Variant

Dim srcWs As Worksheet

Dim trgWs As Worksheet

Dim srcWb As Workbook

Dim trgWb As Workbook

今回は、こういった冗長な変数宣言のコードを、纏めて記述できるかどうか、解説します。先に結論を書くと、効率性と可読性を両立した書き方としては、以下のようになります。

Dim lastRow As Long, i As Long, k As Long, j As Long, counter As Long

Dim userName As String, areaName As String, productName As String

Dim areaList As Variant, productList As Variant

Dim srcWs As Worksheet, trgWs As Worksheet

Dim srcWb As Workbook, trgWb As Workbook

スポンサーリンク

変数を纏めて宣言できるか?

まず思いつくのは、以下のように同じ型の変数を1行で宣言する方法です。

Dim lastRow, i, k, j, counter As Long

Dim userName, areaName, productName As String

Dim areaList, productList As Variant

Dim srcWs, trgWs As Worksheet

Dim srcWb, trgWb As Workbook

この方法で記述しても、エラーが出ずに、マクロが動くこともあります。しかし注意が必要なのは、カンマ区切りの部分です。例えば上記の1行目では、lastRow, i, k, j, counterという5つの整数型(Long)の変数を一行で宣言しているつもりになっていますが、実はこの方法だと最後の変数“counter”のみが`Longとして宣言され、他の変数は方が指定されていないと見做され、”Variant”として扱われます。

これに気づかず、整数以外のデータが変数に代入されそうになった時に、予想した挙動にならない、ということが起こり得るのです。

そこで、上述の通り、纏めて宣言するとしても、以下のように書くことになります。

Dim lastRow As Long, i As Long, k As Long, j As Long, counter As Long

Dim userName As String, areaName As String, productName As String

Dim areaList As Variant, productList As Variant

Dim srcWs As Worksheet, trgWs As Worksheet

Dim srcWb As Workbook, trgWb As Workbook

この方法では、As Longなど変数型の指定の重複は避けられませんが、”Dim”は1行に1つでよく、かつ各行に同じ型が並んでいるので、読みやすさも確保できています。

コメント

タイトルとURLをコピーしました