Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2680 / 13646 ツリー ←次へ | 前へ→

【66569】共通パラメータの事前定義 アテニア 10/9/11(土) 16:42 質問[未読]
【66573】Re:共通パラメータの事前定義 UO3 10/9/11(土) 17:15 回答[未読]
【66576】Re:共通パラメータの事前定義 アテニア 10/9/11(土) 18:03 発言[未読]
【66580】Re:共通パラメータの事前定義 UO3 10/9/11(土) 19:17 回答[未読]
【66581】Re:共通パラメータの事前定義 UO3 10/9/11(土) 19:20 回答[未読]
【66584】Re:共通パラメータの事前定義 neptune 10/9/11(土) 21:50 発言[未読]

【66569】共通パラメータの事前定義
質問  アテニア  - 10/9/11(土) 16:42 -

引用なし
パスワード
   変数Xはその都度変わるパラメータ(既知)で、a,b両方のプロシージャで用います。
そのため、コードの一番先頭に、X = 20 のように定義しておいて
毎回、ここだけを変えて実行したいと思うのですが、
以下のコードだとエラーとなりました。
プロシージャ外で変数の定義はできないものでしょうか?

Dim X As Integer
X = 20

Sub a()
 条件
End Sub

Sub b()
 条件
End Sub

【66573】Re:共通パラメータの事前定義
回答  UO3  - 10/9/11(土) 17:15 -

引用なし
パスワード
   ▼アテニア さん:
こんにちは

>プロシージャ外で変数の定義はできないものでしょうか?

定義はできます。つまり Dim X As Integer
一方、X = 20 は定義ではなく、実行コードですのでプロシジャ内でのみ可能です。

もし、Xをアテニアさんが毎回定義してSub a() や Sub b() を実行させるなら

Const X As Integer = 10

といったように変数ではなく定数で規定する方法があります。
おすすめはしませんが・・・・

x が何らかの条件でkまり、それをプロシジャで使いたいなら
プロシジャの先頭に X の値を取得するコードを記述するか、あるいは
X の値を返すFunctionプロシジャに飛ばす。そんな方法がありますね。

【66576】Re:共通パラメータの事前定義
発言  アテニア  - 10/9/11(土) 18:03 -

引用なし
パスワード
   ▼UO3 さん:

お返事ありがとうございます。
  Const X As Integer = 10
で定義できると知り安心です。


ただ、「おすすめはしませんが・・・・」とあるのですが
不都合が生じるケースもあるということでしょうか?

【66580】Re:共通パラメータの事前定義
回答  UO3  - 10/9/11(土) 19:17 -

引用なし
パスワード
   ▼アテニア さん:

>ただ、「おすすめはしませんが・・・・」とあるのですが
>不都合が生じるケースもあるということでしょうか?

いえいえ、不都合はありません。
x が何なのか、どのように決まるのか、そのx でなにをするのか
わかりませんのでなんともいえませんが
たとえば、10行目まで値が入っているシートの処理をするときに 10 という
値を規定してからマクロ実行させるのであれば、ロジックで 10 を取得するのが
一般的なVBAだと思いまして、そう申し上げました。

そういうものではなく、本当に、ランダムに値を設定するということであれば
たとえばInputBoxで値を入れさせ、それをx に代入して処理を行うというのも
VBAらし方法です。

【66581】Re:共通パラメータの事前定義
回答  UO3  - 10/9/11(土) 19:20 -

引用なし
パスワード
   追加です。

あるいは、どこかのセルに数値を入れておく。
で、そのセルの値をxに取り込んで処理をする方法もありますね。

要は、毎回、コードを書き直すのは、さけたほうがよろしいかと。

【66584】Re:共通パラメータの事前定義
発言  neptune  - 10/9/11(土) 21:50 -

引用なし
パスワード
   ▼アテニア さん:
横から失礼します。
UO3 さんが既にお答えになっていますが、別の見方という事で。

>ただ、「おすすめはしませんが・・・・」とあるのですが
>不都合が生じるケースもあるということでしょうか?
プログラムが複雑になってくると広域変数(この場合はモジュールレベルですが)
が多くなると書いた本人がプロシージャを眺めていてもこの変数はどれだったんだ?
と訳がわからなくなる事が有ります。・・・数か月経つとよけいに。
可読性という意味だと宜しくないです。

広域変数は出来るだけ減らすというのはセオリーです。

変数の扱いは大変重要でそれなしでは殆ど何も書けません。
もし、これからもVBAでプログラミングをするなら参考書を読むか、
helpで以下を読む事をお勧めします。

目次
visual basic プログラミングのヒント
-Sub プロシージャと Function プロシージャの呼び出し
--定数の宣言
--変数の宣言
--引数の効率的な引き渡し
--適用範囲と参照可能範囲の概要
--変数の有効期間の概要
--宣言ステートメントの記述方法

2680 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free