プロが教えるわが家の防犯対策術!

お世話になります。

VBAの勉強を始めたばかりです。
今初めてプログラムを作っています。
そこでひとつ疑問が有るのですが、変数の宣言で「Dim As 」の表示ルールですが
例えば

疑問1 宣言の位置
Sub test1()
Dim aaa As Singl
For i = 1 To aaa

Next
End Sub

Dim aaa As Singl 
Sub test1()
For i = 1 To aaa

Next
End Sub
には何か違いは有りますか?

疑問2 宣言の重複
Sub test1()
Dim aaa As Singl 
For i = 1 To aaa

Next



Dim aaa As Singl 
For i = 1 To aaa

Next
End Sub
各処理のプログラムごとに変数を宣言することは出来ますか?また、出来たとして弊害は考えられますか?

お恥ずかしい質問で申し訳ありませんが宜しくお願いします。

A 回答 (3件)

No.2 のお礼について



「変数名が何だったか解らなくなるので」ならば「'Dim aaa As Singl」のように頭に「'」をつけてコメントにしてしまえば何度書いてもいいです。

ただ、Excel VBA の場合、変数名に日本語が使えるのでそれを利用すると良いと思います。

個人的には「Dim Lng_行 As Long」のようにするようにしています。
・頭3文字は変数型の略語を使う → どんな変数型かがいつでも判る。型ごとに同じ名前が使える。
・頭1文字は大文字、次からの2文字は小文字にする → プログラム部分では全て小文字入力する事によって、ミススペルすると頭が小文字のままなのでデバックが楽になります。
・アルファベット、アンダーバーに続いて日本語を使う → 圧倒的に可読性が高くなる。定義済みの物と被る可能性が無い。
欠点は入力に時間がかかる事でしょうか?でもその分コメントを書く必要が減るのでメリットはかなりあると思っています。
    • good
    • 0
この回答へのお礼

GooUserラック さん
ご回答有難う御座います。

「'」をつけてコメントや表示の仕方をもっと工夫してみます。
「アンダーバーに続いて日本語」とても使い勝手が良さそうです。VBAに慣れるまでとりあえず四苦八苦してみます。貴重なご提案有難うございました。

お礼日時:2017/05/22 15:40

No.1 のお礼について



「疑問1」は別物です。例えば以下の場合、「test1」は何度実行しても「1」と表示されますが、「test2」はどんどん数が増えていきます。
また「test2」「test1」「test2」「test1」「test2」の順に実行すると「1」「1」「2」「1」「3」と表示されます。
----------------------------------------------------------------------
Option Explicit

Dim a As Long

Sub test1()
Dim a As Long
a = a + 1
MsgBox (a)
End Sub

Sub test2()
a = a + 1
MsgBox (a)
End Sub
----------------------------------------------------------------------


すみません。「疑問2」について何も答えていませんでしたね。こちらはエラーになります。
    • good
    • 0
この回答へのお礼

GooUserラック さん
ご回答有難う御座います。

疑問1
なんとなく解りました。
「test1」では変数を毎回宣言するので「a」はその度に「0」になる。
「test2」では変数を最初に宣言するがその後は宣言しない為「a」は「0」から「1」づつ増える事になる。
と言う事ですね。

疑問2
有難う御座います。やはり無理ですか。
よく変数名が何だったか解らなくなるので作っている関数で使う変数を毎回書ければと思った次第です。

ご教授有難う御座いました。

お礼日時:2017/05/20 16:41

「Sub」~「End Sub」の外に書いた場合は、そのモジュールの共通のものになります。


「Sub」~「End Sub」の中に書いた場合は、その「Sub」~「End Sub」内だけのものになります。
両方同じものが有った場合は「Sub」~「End Sub」の中に書いたが優先になります。
    • good
    • 0
この回答へのお礼

GooUserラック さん
ご回答有難う御座います。

疑問1の方は一つの「Sub」~「End Sub」の場合はどちらでも同じと言う事ですか?

疑問2の方は一つの「Sub」~「End Sub」の中にある場合なのですが不具合は無いでしょうか?

ややこしい質問で申し訳ありません。
宜しくお願いします。

お礼日時:2017/05/20 15:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!