• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vbaで配列に値を格納する場合)

vbaで配列に値を格納する場合の変数宣言の違いとは?

このQ&Aのポイント
  • vbaで配列に値を格納する場合、変数の宣言方法には2つの選択肢があります。一つ目は「Dim tmp() As String」という形で配列の要素の型を指定する方法です。二つ目は「Dim tmp As Variant」という形でVariant型として宣言する方法です。
  • どちらの方法を使っても問題なく動作しますが、Variant型の宣言は特定のデータ型を指定せずにすべてのデータ型を格納することができるため、柔軟性が高いと言えます。
  • 一方で、配列の要素の型を指定する方法の方がメモリ効率がよくなるため、大量のデータを扱う場合や処理速度が重要な場合にはこちらの方法を選ぶことが推奨されます。

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

  • ベストアンサー
回答No.3

>Variant型での宣言はあまりしない方が良いですか? 配列の場合は、Variant型で構わないですね。 数値で、Long型とかは決めておいたほうが、若干スピードが速いです。 概ね、データ型を決めておく理由は、省メモリからの理由です。Variant型は、String型から、Object型まだ何でも入るので、それだけ器が大きいわけです。初心者は、あまり、データ型にこだわると、まともなコードが書けなくなってしまいますから、ある程度上達してからのほうがよいです。何も考えないで、Integer型を変数に付けるほうが、エラーの度合いが高くなることもあります。 Dim tmp() As String 大量のデータを入れて、省メモリを考えるなら、最初に、データ型を決めればよいのですが、今どき、そこまで気を回す必要は今はないと思います。 Variant 型というのは、受け皿は何でもよいという意味です。 例えば、こんなスタイルなら、Variant 型のみのはずです。 この場合、内部が全部文字型とは限らないのです。 Split関数と同じように、Array関数も同じように配列を生成するのに使用します。 Sub Sample2() Dim tmp As Variant tmp = Array("a", "i", "u", "e", "o") End Sub >Dim tmp() As String >ならエラーにならないのですが >Dim tmp As String >だとエラーになってしまう理由 String型と決まっている場合で、配列なら、配列の文字列型で、「tmp() As String」と表しますが、「tmp As String」は、単なる文字列という意味ですから、入れ物が違います。

fjmfrkkqeyut
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

一応VBでプログラミングしていますが、ほかに回答してる方が居ないので 分る範囲で答えます。 Variant型での宣言はあまりしない方が良いですか?  これは文字列でも、数値でも受け入れる変数だったっと思います。  ですから、この変数にどんな書式の物が入っているか、区別できるほうが良いと思います。   Dim tmp As String  tmpは文字を扱う宣言ですね Splitは使ったことないし、今ヘルプに繋がらない状態なので良く分りませんが、   入力していくと「vbBinaryCompare」が出てきます、バイナリー書式との比較と言うことらしいです。  だとすれば Dim tmp As String とは書式が一致しないのでエラーになると思います。 Dim tmp() As String  これは使ったことがないので分りませんが、エラーにならないと言うことは、Variant型と同様なのかもしれません。 良く分らないのに、こんな回答で申し訳ありません。

fjmfrkkqeyut
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

Variant型は代入の際に型を自動的に判断して処理してくれる(その分パフォーマンスは落ちます)ので便利な反面、 あいまいさが仇となってバグの原因になりやすく、 型がわかりにくくなるのでデバッグするのにも苦労します。 ですから扱う型がわかっているのであれば、 Variantを使わずにきちんと適切な型を指定した方がよいでしょう。 宣言の際、変数名の後ろにかっこをつけると配列として扱われます。  Dim tmp() As String 'String型の配列  Dim tmp As String 'String型の変数 SplitはString型の配列を返す関数なので、 戻り値はString型の配列(一応Variant型の変数も可)に格納する必要があります。 そのため、  Dim tmp As String 'String型の変数  tmp = Split(myStr, ",") '「String型の変数」に「String型の配列」を代入? とするとエラーになります。

fjmfrkkqeyut
質問者

お礼

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

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • 製品名: EnjoyDVD
  • OS: Windows11
  • 問題詳細: ダウンロードページでダウンロードをクリックしてもファイル名を指定して実行のメッセージがでない
回答を見る

専門家に質問してみよう