• ベストアンサー

変数の型を定義しなかった場合どうなりますか?

cev87700の回答

  • cev87700
  • ベストアンサー率72% (187/257)
回答No.2

VBAの場合、変数を定義しないとvariant型になります。(状況にもよりますが…) 万能の型ですので、いろいろな状況で使うことは出来ますが、他の変数に比べ、メモリの使用領域が増えます。 小さな規模のマクロですとあまり気にになりませんが、複雑で長いマクロを書くと、処理時間が顕著に違ってきます。 また、関数によっては値として受け取れるものが数字型限定のものもあり、この時variantのままだと、きちんと数字を入れているはずなのに型の不一致エラーを受け取るなんて事もあります。 プログラムをしている場合、想定外の動きをしないように用途を限定できる(つまり型を指定する)ということは処理上メリットになります。 variantのように複数の処理に応じられる、ということは裏を返すとどう動くか分からない、ということですので。 > 他の言語では型を定義しなければ、その変数を使うことが出来ないというようなものもあるのでしょうか? はい、あります。というより、殆どそうじゃないですかね。 言語によっては、「型を指定しないとエラーにする」というようなスイッチが存在する言語もあります。 他にもメリット・デメリットあると思いますので、他の方の意見も参考にしていただければと思います。

関連するQ&A

  • 大量の変数を定義するにはどうしたら良いですか?

    VBA或いはVBのプログラムの最初で変数の型を定義したい場合、 変数が100個以上ある場合にはどうすれば良いのでしょうか? 100行にも渡って変数の定義を書くのはあまりにも見づらいと思います。何か良い方法がありましたら教えて下さい。

  • VBAで変数定義を変更する方法

    Data_Typeという変数の中に文字列doubleが入っていたら、 AIyyという変数をdoubleで定義、 longが入っていたらlongで定義するというプログラムを作りたいのですが If Data_Type = "double" Then Dim AIyy As Double ElseIf Data_Type = "long" Then Dim AIyy As Long End If と書くと、定義が重複しているというエラーが表示されてうまくいきません。 これはどうすれば良いでしょうか? それと一度integerで定義した変数をlongなどに定義を変更したい場合どのようにすれば良いでしょうか?

  • 変数の型について

    VBA初心者です。 変数っていうのはその用途に合わせて方を宣言しますよね。 例)Dim r As Integer ですが稀に型が無い宣言があります。 例)Dim r そういうのはどういう時に使用するのですか? また、どういう風に解釈されるのでしょうか?

  • 数値型 変数の型

    「51100078248」という資料番号を数値型で変数に格納したいのですが long型だとオーバーフローしてしまいます。 この場合は何型の変数の型に格納すればいいでしょうか?

  • C言語の変数の型がわかりません

    C言語の変数の型がわかりません [int]は4バイトを使って整数(-2147483648~2147483648)を格納できる. [long int]は4バイトを使って整数(-2147483648~2147483648)を格納できる. のようなことが書いてあります. [int]と[long int]の違いは何ですか?

  • エクセルvbaの変数について

    エクセルVBAについて、同じ型の値が複数列あった際に、変数に取り入れる方法として、それぞれ一つずつ別々に変数に入れる場合と、ユーザー定義型変数を定義して入れる場合の二つがあると思いま すが、どちらの方がメモリを使わなくて済むのでしょうか。また、他にも長短があればご教示下さい。

  • VBAで変数定義の必要性について

    ==(1)================= Dim abc As Long abc = 5 ===================== ==(2)================= abc = 5 ===================== あるパソコンで(2)のコードで 「オブジェクトまたはライブラリが見つかりません」 とのエラーになります。(多数のパソコンでエラーになりません) VBAに対して、変数が定義されなくても、値をセットされた際に、 変数属性を与えるとのように考えれば良いですか。 以上、よろしくお願いします。

  • 標準Cでのオブジェクト(変数)の定義について

    標準Cのオブジェクト(変数)の定義に「その内容によって、値を表現することができる実行環境中の記憶域の領域。ビットフィールド以外のオブジェクトは、連続する1つ以上のバイトからなる。そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。 オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とありますが、具体的に何を指しているのかが解りません。以下のように疑問点をまとめました。 1、「そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。」    Int型 long型 double型等を例に取ると、「処理系定義」はそのバイト数が4バイト8バイトと考えられますが、「明示的に規定する」とは、Int型 long型 double型等で具体的にどのような定義を指しているのでしょうか? 2、「オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とは、具体的に一体何を言いたいのか解りかねます。「参照」とは何を指しているのか?ポインタを指しているのか、「ポインタを指している」としたならなぜそれをここに書き加える必要があるのか?それとも、もっと一般的な事をいっているのか?もしもっと一般的な事を言っているならそれは何なのか? 宜しく願います。

  • C# 変数の動的な再定義

    こんにちわ  変数の動的な再定義というものが可能かどうかお伺いしたく質問させていただきました。 具体的には宣言時にはpublic int numberと宣言しておいて、プログラムのLoad時に、プログラム内でdouble型で宣言しなおすといった内容です。 ※上記の内容は質問用のサンプルです。ジェネリックを使えばいいとかあると思いますがあくまで可能かどうかの質問です。 やりたいことは、プログラム実行時に型を決めて、コンパイルも通したいという内容です。 dynamicを使用すれば想定通りの動きのものはできましたが、別のやり方も模索しております。 プログラム内でなんとか再定義ができないものかと思ってます。

  • 変数の型でlong longとunsigned long longと言うのは何ですか?

    教えていただきたいのですが、変数の型にlong longやunsigned long long なるものがあると聞いたのですが、どのようなものでしょうか? また、どのように宣言するのでしょうか?通常のlongなどと同じ要領で宣言し てやれば良いのでしょうか? もし、この型がある場合に、制約はあるのでしょうか?Unixでしか使えないとか の制約等ありましたらぜひ教えてください。 お願いいたします。