こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

全ての変数をバリアント型で宣言した場合

VBAでプログラムを作る時に
全ての変数をバリアント型で宣言した場合
どういう問題が発生しますか?

今のパソコンならメモリを気にしなくても問題ないから
全てバリアント型でもいいのでしょうか?

投稿日時 - 2016-02-11 18:05:45

QNo.9126243

困ってます

質問者が選んだベストアンサー

全部バリアントでも、宣言しているだけまだましだとは言えますけど、できるだけ早くその域から脱して、中身に適した型宣言を行えるようになるべきですね。

と言うのは、すでに指摘されている「後でわかりにくくなる」のはもちろん、追跡が面倒なバグを抱え込む心配があるからです。単純な例を示します。

For i = hoge To 10
・・・・ループ内処理・・・
Next

という単純な処理で、ループの初期値を与える変数hogeに数値じゃない値が入っていたら、これは当然エラーになりますよね?それはいいでしょう。問題はなぜそうなったかを追跡する時です。

変数hogeが数値型なら、hogeに数値以外の値を代入しようとした時点でエラーになるので、すぐにやらかした場所がわかります。しかしバリアント型だと何でも入れられちゃうので入れた時点ではわからず、このForループに来るまでエラーにならない。ってことは、どこでおかしな値を入れちゃったのかは片っ端から検索して回らないとわからないことになります。ここでさらにめんどくさい可能性があります。

'これならすぐわかるが、
hoge = "a123"

'こうなってたらどう判断しますか?
hoge = kari

全てきちんと型宣言をしてあれば、後者の場合でもその場でエラーになるからすぐにわかります。ぶっちゃけ、規模の小さいコードだったら別に変数宣言もしなくて大丈夫だったりもするんですが、それなりに規模があるコードや登場する変数が多いコードでは、使う変数の型を検討し、相応な型宣言をしておく方が自分の身を守ることにつながるのです。

投稿日時 - 2016-02-12 10:40:00

お礼

ありがとうございました。

投稿日時 - 2016-02-15 21:55:27

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

私は、普段「VBScript」でプログラムを組んでいますが、すべて短いプログラムで、せいぜい数百行です。

「VBScript」は型宣言が出来ないので、結果、すべて「Variant」型になってしまいます。

短いプログラムで、使う変数が少ない場合は、問題を感じませんが、やはり、少し長くなると、頭の中がややこしくなります。

「VBA」でプログラミングされているなら、「型」宣言に慣れ親しんでおかれる方が絶対にいいと思います。

型宣言を習慣づけておかれた方がいいです。

投稿日時 - 2016-02-11 19:22:05

お礼

ありがとうございました。

投稿日時 - 2016-02-15 21:55:29

ANo.1

Q、全ての変数をバリアント型で宣言した場合。
A、訳の判らない変数宣言になります。

ですから、誰も読む気はしないでしょう。

Dim ExitNow As Boolean
Dim N As Integer
Dim I As Integer
Dim S As Integer
Dim T As Integer
Dim strINList(1) As String
Dim strSQL As String
Dim strDatas As String
Dim strFamily As String
Dim strFamilies As String
Dim strName As String
Dim strNames As String

   ↓

Dim ExitNow As Variant
Dim N As Variant
Dim I As Variant
Dim S As Variant
Dim T As Variant
Dim varINList(1) As Variant
Dim varSQL As Variant
Dim varDatas As Variant
Dim varFamily As Variant
Dim varFamilies As Variant
Dim varName As Variant
Dim varNames As Variant

もう、変数タイプが不明ですので、用途も類推できません。また、変数の有効性をチェックする要領も定かではありません。IF-THEN 文を書く際も、冒頭の宣言を≪タイプ控え≫として残しておいて一々参照する羽目になります。変数の宣言と変数の命名規則は対のもの。そして、それはプログラミングをスムーズにするキモです。それを軽視・無視したプログラムは、誰も読む気はしないでしょう。

  IF Len(strdatas & "") Then

  IF I > 0 Then

  IF ExitNow Then

投稿日時 - 2016-02-11 18:27:57

お礼

ありがとうございました。

投稿日時 - 2016-02-15 21:55:30

あなたにオススメの質問