アプリ版:「スタンプのみでお礼する」機能のリリースについて

変数の宣言Dimは、いつもSubの先頭に書いてます。固めておいた方が見やすいとの理由です。ところが最近ネットで見た意見が「宣言は使う直前に書くべき、理由は変数の寿命が短くなるから」私の周囲でも、先頭でなく途中位置で書く例を(少ないですが)見たことがあります。

確かに変数の宣言~End Subまでの間は短くなりますが、何か良いことあるのですか?

A 回答 (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 が有効です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
vの宣言を途中ですれば、前の方で使われたvは間違いだと分かる、と言うことでしょうか。

お礼日時:2018/03/02 07:10

こんにちは。



>変数の宣言Dimは、いつもSubの先頭に書いてます。
これは、一つの(コーディング)ルールですね。
VBAというよりも、VB6のしきたりで、Dim の宣言を先頭に出すというのが決まりだったのです。実は、意外に人の冷たい視線が気になったりするので、ルールはルール通り書いているだけだったりします。

>最近ネットで見た意見が「宣言は使う直前に書くべき、理由は変数の寿命が短くなるから」
「ローカル変数は、利用する直前で宣言する」という、VB.Net のルールです。
付け加えると「ローカル変数は、再利用しない」というものもあります。
理由としては、可読性・保守性の問題だとしています。
(『電通国際情報サービス』という所が、これをまとめています)

そういう、VB.Net は、旧VB6 のイメージを消すために新しい書き方をしているのではないかと思うこともありますね。それなりに理由はあるのは聞いてはいますが。

VB.Net と、VBA/VB6 とは違いますから、勝手も違うものだと思います。

VBAの場合は、一部の変数は使いまわしするという習慣があります。(カウンターのi, j など) 変数を使い終わっても、それの変数自体は残ってしまいますので、省メモリの観点から、再利用ということも、否定はできません。しかし、私は、ii とか、jj とか、i1, i2 という変数の書き方もあるのも知っていますが、そこまでしても意味があるのかなって思うことがあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえず、一回使ってみようかと思ってます。
下の方で「この変数、何だっけ?」と上に向かって探し始めてハマる危険はありそうです。

お礼日時:2018/03/01 19:51

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までの間は短く」とは無関係。
    • good
    • 0
この回答へのお礼

ありがとうございます。
どちらがいいか、比べてみたことがないので正直分かりません。

お礼日時:2018/03/01 19:44

要らない誤解釈しなくて済むように、先頭で書いておいた方が良いかと



というのは、ここで問題です
以下の ★ で表示される値は何でしょう

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
    • good
    • 3
この回答へのお礼

ありがとうございます。
そんなぁ、やだなぁ、4でしょ?さらっと書いたフリして動作確認、、、ガーン10でした。
まだまだ修行が足りませんね。

お礼日時:2018/03/01 19:39

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A