• ベストアンサー

配列を初期化する時ってどうすればいいですか?

Dim test() As String や Dim test As Variant で、宣言した配列を初期化する時ってどうすればいいですか? test="" test=Null test= Empty test= = Nothing は、エラーになります。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。 場合によって意味が違ったりするので、サンプル3種。 ' ' /// Sub Re8377795a() ' Variant型変数に動的配列 Dim test As Variant Dim i As Long ReDim test(65 To 90) As String '  初期化、次元(サイズ)を再定義 For i = 65 To 90 test(i) = Chr(i) Next i MsgBox "■" & Join(test) & "■" ReDim test(65 To 90) '  再初期化 MsgBox "■" & Join(test) & "■" Erase test '  メモリ解放 MsgBox "■" & Join(test) & "■" End Sub Sub Re8377795b() ' 動的配列 ' Dim test() As Variant Dim test() As String Dim i As Long ReDim test(65 To 90) '  初期化、次元(サイズ)を再定義 For i = 65 To 90 test(i) = Chr(i) Next i MsgBox "■" & Join(test()) & "■" ReDim test(65 To 90) '  再初期化 MsgBox "■" & Join(test()) & "■" Erase test() '  メモリ解放 MsgBox "■" & Join(test()) & "■" End Sub Sub Re8377795c() ' 静的配列 ' Dim test(65 To 90) As Variant '  初期化、次元(サイズ)を定義 Dim test(65 To 90) As String '  初期化、次元(サイズ)を定義 Dim i As Long For i = 65 To 90 test(i) = Chr(i) Next i MsgBox "■" & Join(test()) & "■" Erase test() '  再初期化 MsgBox "■" & Join(test()) & "■" End Sub ' ' /// 〓以下、VBAヘルプ「Erase ステートメント」「解説」より抜粋引用〓  <配列の型>          <Erase ステートメントの実行結果> 静的数値配列           要素はすべて 0 に設定されます。 静的文字列配列 (可変長)     要素はすべて長さ 0 の文字列 ("") に設定されます。 静的文字列配列 (固定長)     要素はすべて 0 に設定されます。 静的バリアント型 (Variant) 配列 要素はすべて Empty 値に設定されます。 ユーザー定義型配列       各要素は、別個の変数として設定されます。 オブジェクト配列        要素はすべて特別な値 Nothing に設定されます。 〓以上、引用〓 因みに、上記サンプル b、c で出てくる test() については、 単に test と省略して書いても動きますが、配列であることを明示する意味で 変数の末尾に()を付けることが推奨されています。 (Dim test() As ... のように動的配列を宣言する場合は無論、()は省略できませんが) とりあえず、以上です。

CEMQYCSDELUFK
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

空の配列をつくりたいと言う事なのかな。 この辺とか。

参考URL:
http://www42.atwiki.jp/jfactory/m/pages/67.html
CEMQYCSDELUFK
質問者

お礼

ありがとうございます。

  • maia55jp
  • ベストアンサー率61% (327/535)
回答No.1

>Dim test() As String >Dim test As Variant この状態で、動的変数を使う宣言をしているだけで実態はありません。 testと言う箱を使うよで、箱自体は無い状態、VBの場合、何も割り当て されていない状態になっています。 ReDim test(10)等の動的割当をした段階で初期化可能になります 配列変数の利用 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_07.html

CEMQYCSDELUFK
質問者

お礼

ありがとうございます。

関連するQ&A

  • 配列の初期化

    Dim ls_var() as string のように宣言した配列をすべて""で初期化したいです。 googleで検索してもみつからないのですが、一発で済ませる方法はないのでしょうか?

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • 配列の宣言の仕方

    vs2005を使用しています。 配列の宣言の方法はいくつかあるようですが 違いが分かりません。 Dim strDate() As String = New String(1) {} Dim strDate() As String = New String(1) {"",""} Dim strDate As String() = {"", ""} Dim strDate (1) As String Dim strDate As New ArrayList も候補のひとつですが、この違いは分かります。 やりたいことは、要素数2の配列を""で初期化したいというものです。 そしてその配列を返す関数を作成しています。 どれも同じように思うのですが、違いがあれば教えていただきたいと思います。 よろしくお願いします。 でもかまわないのですが、

  • 配列に関してです。

    Dim a(,) As Integer a= New Integer(,) {0,300,400,400,500,600,700,800}  {400,500,700,800,1000,1200,1300,1500}   {700,1000,1300,1600,2000,2000,2000,2000}   {1300,2000,2000,2000,2000,2000,2000,2000} ローカルレベルでこのように配列を宣言したのですが ・配列初期化子の次元が少なすぎます。 ・構文エラーです。 とエラーが出てしまいます。 この宣言、初期化の仕方のどこがおかしいのでしょうか?

  • 2次元配列の宣言について

    文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。

  • ExcelVBAで配列に一気にデータを入れる

    かすかな記憶で申し訳ありませんが、変数をVariant型で宣言しておくと、","で区切られた文字列は、一気に配列として代入出来ると聞いた気がしています。色々と試してみたのですが、よくわかりません。よろしくお願いいたします。 Dim a as Variant dim myText as string myText = "月曜,火曜,水曜,木曜,金曜,土曜,日曜" のような感じで(実際のカンマで区切られた文字列は100個ぐらい要素があります)一気に代入して、aを配列として扱いたいのです。 よろしくお願いいたします。

  • エクセルVBAで配列ができなかった時の処理

    エクセルでコマンドラインでデータを配列に 落としていますがデータがなかった時 配列もできていないようなのですがその時の書式がわかりません。 Dim cmd As String Dim filedata() As String Dim i As Integer cmd = dosのコマンド Set Result = WSH.exec("%ComSpec% /c " & cmd) Do While Result.Status = 0 DoEvents Loop filedata = Split(Result.StdOut.ReadAll, vbLf) '配列データができなかった時の処理 例えば  IF filedata(0)=""  IF filedata=""  IF filedate IS Nothing など いづれもエラーになります。 なにか書式ありますでしょうか

  • VB.net 引数で配列変数を渡す際の要素数

    VB.net 2010 の質問です。 配列変数を他のプロシージャに引数で渡す際の、配列変数の要素数をあらかじめ宣言していないとエラーになります。 Dim Hairetsu() As String ' ←エラー Dim Hairetsu(100) As String ' ←正常 Public Sub aaa(ByRef Hairetsu() As String) Hairetsu(0) = "Test" '←正常の場合と、エラーの場合 End Sub Hairetsu(100) のように、要素数を宣言していると、エラーにならないのですが、 プログラム中、要素数がどこまで増加するか、分かりません。 Hairetsu()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • 動的配列と固定長配列の違いについて分からなくなってしまいました。

    動的配列と固定長配列の違いについて分からなくなってしまいました。 http://msdn.microsoft.com/ja-jp/library/cc343797.aspx 上のURLにあるmsdnの解説で Dim astr1() As String Dim astr2(0 To 9) As String astr1 = astr2 を引用した説明があり、重要事項として 「両方の配列が動的配列であり、いずれも同じデータ型として宣言されている必要があります。」 とありました。 astr1は動的配列なのは分かりますが、astr2は固定長配列だと思います。 「両方の配列が動的配列」とはどのように理解すべきなのでしょうか。

専門家に質問してみよう