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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel マクロで For 文のインデックスを先に宣言する理由 7 2022/08/27 00:26
- Visual Basic(VBA) VBAに関する質問です 2 2022/03/30 22:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
VBAコード記述に際して、コード全体を自動的にインデント付ける方法
Access(アクセス)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
5
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
6
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
フォントの大きさ
Visual Basic(VBA)
-
10
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
11
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
12
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
13
VBAでEmpty値って何ですか?
Excel(エクセル)
-
14
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
15
大量の変数を定義するにはどうしたら良いですか?
Visual Basic(VBA)
-
16
エクセルマクロで特定の範囲が空白という条件
Excel(エクセル)
-
17
Excel VBAで文字列の可視長を得るにはどうしたよいでしょうか?
Visual Basic(VBA)
-
18
Excelの非表示列も含めてコピー
Excel(エクセル)
-
19
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
20
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
EXCEL VBA API宣言でコンパイル...
-
名前が二重に定義されています
-
ソケット通信で同時受信の制限?
-
VBSにてサーバー中のエクセルフ...
-
vbscriptの変数宣言
-
JScriptでアラートを表示するには
-
C# try-catch でcatchに飛ばす方法
-
ASP内で他のASPファイルを読み...
-
Buttonの処理について
-
winsock通信時エラーの回避
-
FileCopy時のエラー
-
VB6でRDOに接続できない
-
画面のリフレッシュを意図的に...
-
[PL/SQL]REFCURSORが戻り値のプ...
-
ASPプログラミングでADODB.C...
-
oracleを利用できません。(glob...
-
Outlookで添付ファイルの有無を...
-
ASP.netで使用するWEBサーバに...
-
ActiveDirectoryで高い層のOUを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
vbscriptの変数宣言
-
VBSでIEを起動し、拡大率を変更...
-
TCPサーバ bind関数のエラーに...
-
名前が二重に定義されています
-
式はメソッドではありませんと...
-
VBSにてサーバー中のエクセルフ...
-
ASPでAccessのデータを更新、削除
-
誰かVisualBasicのデータフォー...
-
golang 空文字判定について
-
十進BASICについて
-
EXCEL VBA API宣言でコンパイル...
-
標準モジュールPublic宣言変数...
-
COBOLのPERFORM文
-
10万回でも動くようにするには?
-
ダブルクォーテーションの吐き出し
-
ハンゲーム
-
Now関数が12時間表記になる
-
C# try-catch でcatchに飛ばす方法
おすすめ情報