こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[VBA] 型宣言の順番について

こちらの識者の方々にはいつもお世話になっています。
VBAの質問です。

環境は下記になります。
OS=windows7 pro 64bit
Office=Excel2010(14.0.7128.5000)

私はVBAのレベルとしては初級で、具体的には配列内で処理をしたり、連想配列のコードが書けるぐらいで、クラスモジュールはわかりません、ぐらいの感じです。(分かりづらくてすみません)

私はいつも宣言の文を書くときに、プロシージャの一番上に全て書き、順番もだいたい大きい(と感じる)型のものから書いています。

例:
Sub test()
 Dim FSO As Object
 Dim oDic As Object
 Dim wbSour As Workbook, wbDest As Workbook
 Dim wsSour As Worksheet, wsDest As Worksheet
 Dim r as Range
 Dim tmp As Variant
 Dim destDir As String
 Dim i As Long, j As Long, k As Long

 ~
 ~
 ~
 ~
 ~
 ~

End Sub

みたいな感じです。
いつもこれでいいのかなぁ?と思いながら宣言文を書いてるんですが、ネットに転がっている他のソースコードを見ると、変数を使う直前で都度宣言しているものもあったりするので、正しい(とされている)宣言のしかたってあるのでしょうか?
そんなの人と場合によるって感じだと思うのですが、こういう理由で自分はこう宣言している、とか、これからのことを考えるとこうしたほうがいい、みたいなのがあれば教えてください。

質問に不備不足等ございましたらご指摘ください。
ご面倒お掛けしますがよろしくお願いします。

投稿日時 - 2016-11-23 19:55:52

QNo.9259379

暇なときに回答ください

質問者が選んだベストアンサー

>変数数を使う直前で都度宣言している

C++やJavaをメインで使っている人の場合、その方がコードを書きやすく解りやすいようです。

>こういう理由で自分はこう宣言している

私の場合、VBAのヘルプに「プロシージャ内で Dim ステートメントを使用する場合は、通常、Dim ステートメントをプロシージャの最初で記述します。」とあるので、SubやFunctiionの後に纏めて書く様にしています。

ぶっちゃけ正しく動くならばどうでもいい話ですが。

投稿日時 - 2016-11-23 21:35:33

お礼

ありがとうございます。
とても参考になりました。

投稿日時 - 2016-11-27 15:54:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

お気持ちは、すごく分かりますが、意味はないと思います。

私も、キッチリ順番を決めたい気持ちはすごくありますので、お気持ちは分かるのですが、自己満足の世界でしかないかと思います。

その変数を使う前であれば、いつ宣言しても、プログラム上、何の意味もないからです。

しかし、明確な順番みたいなのがあると、気分的に安心できるのは確かですが・・・

私は、とりあえず、大きな意味のあるもの、と自分で思ったものからにしています。

投稿日時 - 2016-11-23 21:31:05

お礼

ありがとうございます。
とても参考になりました。

投稿日時 - 2016-11-27 15:53:59

ANo.1

Sub test()
Dim FSO As Object
Dim oDic As Object
Dim wbSour As Workbook, wbDest As Workbook
Dim wsSour As Worksheet, wsDest As Worksheet
Dim r as Range
Dim tmp As Variant
Dim destDir As String
Dim i As Long, j As Long, k As Long

・・・・・
End Sub



Sub test()
Dim I As Long         ' XXXXXXXXXXXXXXX
Dim J As Long         ' XXXXXXXXXXXXXXX
Dim K As Long         ' XXXXXXXXXXXXXXX
Dim varTmp As Variant    ' XXXXXXXXXXXXXXX
Dim strDir As String     ' XXXXXXXXXXXXXXX
Dim objFSO As Object    ' XXXXXXXXXXXXXXX
Dim objDic As Object     ' XXXXXXXXXXXXXXX
Dim wbkSour As Workbook ' XXXXXXXXXXXXXXX
Dim wbkDest As Workbook ' XXXXXXXXXXXXXXX
Dim wstSour As Worksheet  ' XXXXXXXXXXXXXXX
Dim wstDest As Worksheet  ' XXXXXXXXXXXXXXX
Dim rngXXXX as Range    ' XXXXXXXXXXXXXXX
・・・・・
End Sub

私であれば・・・。

投稿日時 - 2016-11-23 20:17:27

お礼

ありがとうございます。
とても参考になりました。

投稿日時 - 2016-11-27 15:54:04

あなたにオススメの質問