• ベストアンサー

変数を動的に作るには?

変数を作成する際には必要な分だけ一つずつ宣言する必要があるのでしょうか? 例えば、連番を格納する文字列型変数を一時的に100個必要だとすると Dim textdat1 As String = "Number1" Dim textdat2 as String = "Number2" Dim textdat3 as String = "Number3"      ・      ・      ・ と100個宣言しないといけないと思うのですがこれを For i As Integer = 1 To 100 Dim textdat(i) As String = "Number" & i Next i という様な形で変数を作成することは出来ないのでしょうか。 初歩的な質問かもしれませんが、よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

こういうのは、 「配列」という仕組みの必要性を書いてある説明の、始めにかならず書いてあることでしょう。 その配列を使えばよいでしょう。 配列を使いますという宣言(次元と要素) Dim 配列をクリア Array.Clear 配列の次元と要素をプログラムの実行中に変える Redim Array.Resize 配列を抹消 配列の値を初期化 配列のメソッド・プロパティ ーーー 下記を参考に http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm http://smdn.invisiblefulmoon.net/programming/vb.net/basics/05_array/ ーー 質問にVB6かVB.NET系か書くようにしてください。

heaven123
質問者

お礼

忘れていました、使用言語はVB.NETです。 求めていた事は配列で解決する事が出来ました。 他に回答していただいた方も他の用途で参考にさせて頂きます。 有難う御座いました。

その他の回答 (2)

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

Reflectionを使用すれば動的に変数を宣言できます。 とっても難しいですよ。 ArrayListのようなコレクションクラスを使って動的に配列を生成すれば目的は達成できるのでは? 参考になれば幸いです。 Dim nameLists As New List(Of String) nameLists.Add("どら") nameLists.Add("のび") nameLists.Add("しず") nameLists.Add("じゃい") nameLists.Add("すね") 'じゃいを削除 nameLists.Remove("じゃい") For Each Name As String In nameLists Console.WriteLine(Name) Next nameLists = Nothing 'なんとしても変数名でがんばりたい場合 'StringDictionaryでもよいほかにも使えますが今回はHashTableで 'Dim s As Collections.Specialized.StringDictionary Dim nameHashTable As New Hashtable Dim counter As Integer = 0 nameHashTable.Add("Number" & counter, "どら") counter += 1 nameHashTable.Add("Number" & counter, "のび") counter += 1 nameHashTable.Add("Number" & counter, "しず") counter += 1 nameHashTable.Add("Number" & counter, "じゃい") counter += 1 nameHashTable.Add("Number" & counter, "すね") 'すねを削除 nameHashTable.Remove("Number" & counter) For i As Integer = 1 To nameHashTable.Count - 1 Console.WriteLine(nameHashTable("Number" & i)) Next i

回答No.1

Option Explicit On Option Strict On Option Compare Binary Option Infer Off Class Q5348939 Shared Sub Main() '普通に配列を作ってみる Dim hoge(10) As String For i As Integer = 0 to 10 hoge(i) = i.ToString() Next i System.Diagnostics.Debug.Print(hoge(3)) '"3" 'System.Diagnostics.Debug.Print(hoge3) hoge3という変数を作っているわけではないのでコンパイルエラー。以下同文 'ReDim Preserveはあまり好きじゃないのでArray.Resize 'どうしても動的でなきゃだめ? Dim fuga As String() For i As Integer = 0 to 10 Array.Resize(fuga,i + 1) fuga(i) = i.ToString() Next i System.Diagnostics.Debug.Print(fuga(10)) '俺はリストのほうが好みかな Dim guri As System.Collections.Generic.List(Of String) guri = new System.Collections.Generic.List(Of String)() For i As Integer = 0 to 10 guri.Add(i.ToString()) Next i System.Diagnostics.Debug.Print(guri(4)) '自動でずれる guri.RemoveAt(4) System.Diagnostics.Debug.Print(guri(4)) End Sub End Class

関連するQ&A

  • エクセルVBAでの変数

    いつもお世話になります。 今回の『壁』は”変数”です。 変数の中に更に変数を持たせることはできますか? 何をしたいかと言いますと… dim mon1 as string dim mon2 as string dim mon3 as string dim mon4 as string dim mon5 as string dim tue1 as string dim tue2 as string …というように月曜から日曜までの頭3文字プラス1~5の組み合わせの変数を作りたいのですが、 この調子で作っていくと35コになってしまいます。 そこで、曜日の頭3文字より後ろは決まって1~5のため、 dim i as integer for i = 1 to 5 next i …と組み合わせられないかと思ったのです。 どなたか知恵をお貸しください。 よろしくお願いします。

  • 変数が勝手に変わります

    Dim i As Integer:Dim i2 As Integer:Dim card(5) As Integer:Dim expectPoint0card(1) As Integer '0枚のカードを交換する場合のすべての選択肢の期待値 Dim expectPoint1card(5) As Integer Sub porkerGame() card(1) = 1: card(2) = 2: card(3) = 3: card(4) = 4: card(5) = 5 getExpectPoint1card expectPoint1card End Sub Sub getExpectPoint1card(expectPoint1card() As Integer) Dim tesu1 As Integer:Dim sum1 As Integer For i = 1 To 5 getTesuSum1 i, tesu1, sum1 expectPoint1card(i) = sum1 / tesu1 Next i End Sub Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer) Dim card2(5) As Integer:tesu1 = 0:sum1 = 0 MsgBox rowNumber copy card, card2, 5 MsgBox rowNumber For i = 4 To 55 MsgBox rowNumber card2(rowNumber) = i addTesuSum card2, tesu1, sum1 Next i End Sub Sub copy(row() As Integer, row2() As Integer, i2 As Integer) For i = 1 To i2 row2(i) = row(i) Next i End Sub 上記のプログラムで、ウィンドウに1,6,4,5,6と表示され、その次には、エラーが表示します。僕は、ウィンドウに表示される変数RowNumberの値がしばらくの間は1のままであるようにプログラムを書いたつもりなのですが、変数rowNumberの値が変わるのは、どうしてでしょうか?教えてください。お願いします。

  • エクセル VBA 変数を一括で宣言したい

    こんにちは。VBAプログラム初心者です。 変数を宣言する際、 dim オーダ番号 as long, オーダ番号2 as long, …オーダ番号100 as long という内容を一括で宣言することは可能でしょうか? イメージ的には下のような感じなのですが。。。 dim i as integer for i = 1 to 100 dim オーダ番号i as long dim 単価i as long next マクロで便利にするつもりが余計面倒になっていて困っております。 解決策を教えていただけましたら幸いです。 何卒よろしくお願いいたします。

  • 変数

    Dim トータル As Integer トータル = 200 Dim 変数1(トータル) As Integer Dim 変数2(トータル) As Integer Dim 変数3(トータル) As Integer Dim 変数4(トータル) As Integer ※変数1~4に同じ数の変数(クローン??)を用意したいのですがエラーがでます。 このような使い方は出来ないのでしょうか? なお、VB上ではローマ字で使っています。 変数は6個ぐらいあり 毎回変えるのは面倒なので・・・ (スパイラルモデル方式??といっても使うのは私自信ですが・・・)

  • VBAの変数について

    VBAでUserFormからデータを入力します。 入力された各データをTarget1~Target20に代入します。 各Targetにデータが入っている場合は、配列K(i)に「1」を格納します。 そこで、Target "1"~"20" を変数iであらわしたいのですが、どのように表現したらよいのでしょうか。 Dim i As Integer Dim K(20) As Integer Target1 = TextBox1.Value Target2 = ComboBox1.Value : : Target19 = TextBox12.Value Target20 = ComboBox8.Value For i = 1 To 20 If 『  ?   』 <> "" Then K(i) = 1 EndIf Next i

  • 「変数の宣言」と「変数の定義」は同じ意味ですか?

    Dim myStr As String は、変数の宣言と定義、どちらになるのでしょうか? どちらともいいますか?

  • VBでの変数宣言は1行に2つできないのですか?

    Visual BASICで変数宣言は1行に2つ以上記述しても実際、動作します。 例 DIM A、B as Integer このように宣言すると、AもBも整数となります。 しかし、このように宣言して、この変数を Call サブプログラム名(B) のように、パラメ-タとして引き渡そうとするとエラーとなってしまうようです。 よくわからないまま、 DIM A as Integer DIM B as Integer と分けて記述したらエラーがきえたようです。 変数宣言は1行に2つ以上まとめて記述してはいけないのでしょうか? VBは Ver 5 です。

  • 配列

    エクセルvbaなのですが Sub test() ' 配列 Dim arr() As Integer= {0, 1, 2, 3, 4, 5} ' 抜き出した要素を格納するための変数 Dim i As Integer ' すべての要素について繰り返す For Each i In arr Console.WriteLine (i) Next End Sub これって何でエラーになるのでしょう? Dim arr() As Integer= {0, 1, 2, 3, 4, 5} でエラーになりますが、なぜだかわかりません。

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。

  • コードの簡略化(変数を少なくできますか?)

    カレンダーの作成(4ヶ月分)で 月、曜日、月-日、Do_ITを書き出すセル幅及び高さを VBAのコードでそれぞれ指定しています。 現在、以下のコードですが いかにも変数(i2-i10)の数が多くと無駄のように思えます。 もう少し、スッキリ短く成るコードに出来ませんか ? Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer Dim i5 As Integer, i6 As Integer, i7 As Integer, i8 As Integer Dim i9 As Integer, i10 As Integer 'セル幅の調整 Columns("B:H").ColumnWidth = 10 'セルの高さ調整 (月の行) For i1 = 1 To 40 Step 13 Rows(i1).RowHeight = 14 Next 'セルの高さ調整 (曜日の行) For i2 = 2 To 41 Step 13 Rows(i2).RowHeight = 14 Next 'セルの高さ調整(月-日の行) For i3 = 3 To 11 Step 2 Rows(i3).RowHeight = 16 Next 'セルの高さ調整(月-日の行) For i4 = 16 To 24 Step 2 Rows(i4).RowHeight = 16 Next 'セルの高さ調整 (月-日の行) For i5 = 29 To 37 Step 2 Rows(i5).RowHeight = 16 Next 'セルの高さ調整 (月-日の行) For i6 = 42 To 50 Step 2 Rows(i6).RowHeight = 16 Next 'セルの高さ調整 - Do it For i7 = 4 To 12 Step 2 Rows(i7).RowHeight = 40 Next 'セルの高さ調整 - Do it For i8 = 17 To 25 Step 2 Rows(i8).RowHeight = 40 Next 'セルの高さ調整 - Do it For i9 = 30 To 38 Step 2 Rows(i9).RowHeight = 40 Next 'セルの高さ調整 - Do it For i10 = 43 To 51 Step 2 Rows(i10).RowHeight = 40 Next

専門家に質問してみよう