
No.4ベストアンサー
- 回答日時:
変数を宣言する目的の一つは、間違いを減らすためです。
打ち間違えて、使っていない変数名になってしまった、なんてときに、
Option Explicit が Off だと、エラーにはならずに、そのまま正しく動いているかのように見えてしまうこともあります。
これが、 On だと、打ち間違えた変数名は(多くの場合は)宣言されていないものになるので、エラーになって見つけることができます。
この効果を上げる方法の一つは、変数は使いたいところだけで有効にする、というものです。
#2さんのプログラムを借ります。
Dim u as Long
が適切な場所にあったとして、
もし、
'処理3
u = 5
が正しいのに
'処理3
v = 5
としてしまったとき、
★1 だとエラーにはなりません。★2だとエラーになります。
(たぶん。今Excelが手許に無いので確認できません)
これは、変数の有効範囲を狭めたことによる効果です。
言語によっては、より狭いスコープが使えるものがあります。
例えば、VB.netだと
For i as Integer=1 to 10
Next
だと、このForループの中だけで i が有効です。
No.3
- 回答日時:
こんにちは。
>変数の宣言Dimは、いつもSubの先頭に書いてます。
これは、一つの(コーディング)ルールですね。
VBAというよりも、VB6のしきたりで、Dim の宣言を先頭に出すというのが決まりだったのです。実は、意外に人の冷たい視線が気になったりするので、ルールはルール通り書いているだけだったりします。
>最近ネットで見た意見が「宣言は使う直前に書くべき、理由は変数の寿命が短くなるから」
「ローカル変数は、利用する直前で宣言する」という、VB.Net のルールです。
付け加えると「ローカル変数は、再利用しない」というものもあります。
理由としては、可読性・保守性の問題だとしています。
(『電通国際情報サービス』という所が、これをまとめています)
そういう、VB.Net は、旧VB6 のイメージを消すために新しい書き方をしているのではないかと思うこともありますね。それなりに理由はあるのは聞いてはいますが。
VB.Net と、VBA/VB6 とは違いますから、勝手も違うものだと思います。
VBAの場合は、一部の変数は使いまわしするという習慣があります。(カウンターのi, j など) 変数を使い終わっても、それの変数自体は残ってしまいますので、省メモリの観点から、再利用ということも、否定はできません。しかし、私は、ii とか、jj とか、i1, i2 という変数の書き方もあるのも知っていますが、そこまでしても意味があるのかなって思うことがあります。
ありがとうございます。
とりあえず、一回使ってみようかと思ってます。
下の方で「この変数、何だっけ?」と上に向かって探し始めてハマる危険はありそうです。
No.2
- 回答日時:
Sub t()
'------------------------------
'変数定義部
Dim ...
Dim i As Long '★1
Dim v As Variant = 0 '★1
'------------------------------
'------------------------------
'処理1
'------------------------------
'処理2
'------------------------------
'処理3
'------------------------------
'処理4
'------------------------------
'処理5
'------------------------------
Dim i As Long '★2
Dim v As Variant = 0 '★2
For i = 1 To 4
v = v + i
Next
Debug.Print v
'------------------------------
End Sub
処理の後ろの方になって、初めて出てくる変数の定義や初期化を★1と★2の
どちらで定義したらよりプログラムを読み易いかという話。
「変数の寿命」とか「End Subまでの間は短く」とは無関係。
No.1
- 回答日時:
要らない誤解釈しなくて済むように、先頭で書いておいた方が良いかと
というのは、ここで問題です
以下の ★ で表示される値は何でしょう
1) 4
2) 10
1) or 2) どちらが正解?
Sub t()
Dim i As Long
For i = 1 To 4
Dim v As Variant
v = v + i
Next
Debug.Print v ' ★
End Sub
ありがとうございます。
そんなぁ、やだなぁ、4でしょ?さらっと書いたフリして動作確認、、、ガーン10でした。
まだまだ修行が足りませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
8
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
9
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
10
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
11
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
12
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
13
DoEventsがやはり分からない
Visual Basic(VBA)
-
14
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
15
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
16
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
17
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
18
VBAでEmpty値って何ですか?
Excel(エクセル)
-
19
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
20
エクセルのデータグループ化の際に貼り付けた図だけ一緒に折りたたんでくれません!
Windows Vista・XP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
C# try-catch でcatchに飛ばす方法
-
EXECLマクロでshapeがグルーフ...
-
このページの状態情報は無効で...
-
Tableを動的に増やしたい。
-
[PL/SQL]REFCURSORが戻り値のプ...
-
ネットワーク上のPCのIPとホス...
-
ADSIについて
-
イベントID 2002について
-
ASP.NET 2.0 GridViewの更新ボ...
-
インクルードしたファイルの関...
-
隠しフィールドをVBScriptでの...
-
Outlookで添付ファイルの有無を...
-
「Scripting.FileSystemObject...
-
Response.Redirectで引数2つの...
-
ASPで折れ線グラフを表示したの...
-
ASPからファイルダウンロード
-
[VB6.0] Inet OpenURLのエラー検出
-
GridViewからテンプレートフィ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ソケット通信で同時受信の制限?
-
エクセルVBA 宣言Dimの場所
-
式はメソッドではありませんと...
-
名前が二重に定義されています
-
VBSにてサーバー中のエクセルフ...
-
【VBA】関数の宣言なしにプロシ...
-
エクセルVBAで変数初期値を...
-
TCPサーバ bind関数のエラーに...
-
VBの型宣言の場所について
-
VisualStudioでXMLHTTPオブジェ...
-
EXCEL VBA API宣言でコンパイル...
-
VBSでIEを起動し、拡大率を変更...
-
誰かVisualBasicのデータフォー...
-
10万回でも動くようにするには?
-
ACCESSのAutoKeysマクロでアク...
-
CreateObjectの同時実行時について
-
JScriptでアラートを表示するには
-
VBSについて
-
vbscriptの変数宣言
-
ネットワーク上のPCのIPとホス...
おすすめ情報