• ベストアンサー

2次元動的配列の第一引数のみを可変にする

chibita_papaの回答

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

こんな感じで Structure column Dim col1 As String Dim col2 As String Dim col3 As String End Structure Private Sub test() Dim aStrSKU() As column Dim x As Integer Do Until x = 3 ReDim Preserve aStrSKU(x) aStrSKU(x).col1 = "strPre" aStrSKU(x).col2 = "サブ2" aStrSKU(x).col3 = "サブ3" x = x + 1 Loop End Sub

anman0201
質問者

お礼

ありがとうございます。 参考になりました。

関連するQ&A

  • Visual Studio 2003での2次元可変長配列でエラー

    Visual Studio 2003での2次元可変長配列でエラーが発生します。 エラー内容 'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソースは dim return_array()() For i As Integer = 0 To 5 Step 1 ReDim Preserve return_array(i)(6) Next のような感じです。 ループを使う必要があるのはreturn_array()()が状況に応じてサイズを変更が必要なためです。

  • VBAの動的配列について

    いつもお世話になっております。 エクセルVBAを学習中の者です。 動的配列についてお伺いします。 添付資料を見て頂きたいのですが、 シート名1~4に同一レイアウトの表があります。 これらの表をを2次元配列に格納し、その後、同一レイアウトのシートに一括転記したいと考えています。 転記の事を考えて、条件としては、 シート1から2行目以降のデータを配列『data』に格納、変数『dataCnt』が転記先の行番号と同じになるように考えています。 当初は、配列の定義を『Dim data(100,3) As Variant』と、多めに要素数を定義して、コードを記述していました。 正直、凄く気持ちが悪い感じでした・・・ 最近、動的配列を学習しまして、 シートごとにデータの行数を変数『lastRow』に格納して、配列を再定義して【データ数=要素数】とならないか? と思い、下記のようなコードを書いてみました。 が、『ReDim Preserve~』で実行エラーが発生してしまいます。 原因がなぜかわかりません! そもそも、動的配列はこのような使い方は出来ないのでしょうか? Sub テスト() Dim data() As Variant Dim x As Long Dim i As Long Dim ii As Long Dim lastRow As Long Dim dataCnt As Long dataCnt = 2 For x = 2 To 5 Worksheets(x).Activate lastRow = Cells(Rows.Count, 1).End(xlUp).Row If x = 2 Then ReDim data(2 To lastRow, 3) Else ReDim Preserve data(2 To dataCnt + lastRow - 1, 3) End If For i = 2 To lastRow For ii = 1 To 3 data(dataCnt, ii) = Cells(i, ii) Next ii dataCnt = dataCnt + 1 Next i Next x End Sub どなたかご指導をよろしくお願いいたします。

  • AccessVBAで、二次元配列を動的に設定したい

    以下のコードにあるattrという配列に、DB上のとあるコードと名前を設定したいと思います。 DB上のデータ量は可変なので、データを取得するごとに動的に配列attrの要素数を動的に増やしたいと思っています。 検索等で色々と調べながら以下のコードを書いてみたのですが、どうもうまく動きません。 ご教授願います。 --------------------------------------------------- Dim attr() As String [loop start] ReDim Preserve attr(i, 0) ReDim Preserve attr(i, 1) attr(i, 0) = コード attr(i, 1) = 名前 [loop end]

  • Excel2003VBA Variantについて

    教えてください。 下記にxのコードとyのコードとwのコードとを記載しました。 この内、 wのコード、xのコードでは(3)も含めノーエラーで終わるのですが、 yのコードでは(3)でエラーになってしまいます。 エラー内容は 「インデックスが有効範囲にありません。」 です。 どうしてでしょうか? ご教示をお願い致します。                記 Sub w() Dim B As Variant     ReDim B(1) '・・・(1)     ReDim B(5) '・・・(2)     ReDim B(10)     ReDim Preserve B(15) '・・・(3) End Sub Sub x() Dim B As Variant     ReDim B(1)     B = Split("B4:C15,D4:E15,F4:G15,B4:G15", ",") '・・・(1)     ReDim Preserve B(5) '・・・(2)     ReDim B(10)     ReDim Preserve B(15) '・・・(3) End Sub Sub y() Dim B As Variant     ReDim B(1) '・・・(1)     ReDim B(5) '・・・(2)     B = Evaluate("row(A1:A10)")     ReDim Preserve B(15) '・・・(3) End Sub                          以上

  • ActiveXDLL関数の引数ByRefで配列での呼び出し

    急を要しています。m(__)mなんでもいのでアドバイス、回答お願いいたします。 例えばActiveXDLL関数 Sub func2(ByRef P1()) ReDim P1(1) P1(1) = 2 P1(0) = 1 End Sub のような場合、 redim sData(1)’要素数定義 i = objSS.func2(sData(0)) で使えませんか?(配列は要素の数をASPで定義しておかないとだめなんですよね?) あと、ユーザー定義のコレクション型 Sub func3(ByRef P1() As VBAFix.Collection) ReDim P1(1) As VBAFix.Collection P1(1).Add "1", "1" P1(0).Add "2", "1" End Sub のような場合、 redim col(1) Set col(1) = CreateObject("VBAFix.Collection") set objSS = createObject("prjTest.clsTest") i = objSS.func3(col(0)) このようにしてつかえませんか?

  • VBAで配列に文字列が入らない?

    以下のように配列を設定し、A(ix)の配列にdo untilでそれぞれに文字列を入れようとしておりますが、うまくいきません。 dountil の一回目では代入ができているようですが、2回目ができずに止まってしまいます。 おかしな点がありましたらご指摘いただけませんでしょうか。 Dim A() As String Dim ix As Long ix = 0 ReDim Preserve A(ix) Dim tate As Long tate = 1 Do Until tate = 8 A(ix) = ws.Cells(tate, 1) tate = tate + 1 ix = ix + 1 Loop Doの初回A(0)に文字列は入りますが、 Doの二回目以降A(1)に文字列を入れる作業ができずに止まってしまいます。 よろしくお願いします。

  • 2次元配列の配列

    VisualBasic.NETでプログラムを作っているのですが、2次元配列の配列で行き詰って困っています。 配列1~3を別に定義して、その2次元配列を配列Xという配列にひとまとめにしたいのですが、エラーが出てしまいます。 エラー内容は「配列初期化子の次元が少なすぎます」で、場所は配列Xの第1要素です。 配列1~3以降もどんどん配列を追加していく予定なので、なるべく以下の方法で書いていきたいのですが、解決法はないでしょうか? また、他にいい方法があればご教授ください。 ソースです。 ---------------------------------------- Public 配列1(,) As Integer = _ { _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1}, _ {1, 1, 1} _ } Public 配列2(,) As Integer = _ { _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2}, _ {2, 2, 2} _ } Public 配列3(,) As Integer = _ { _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3}, _ {3, 3, 3} _ } Public 配列X(,)() As Integer = { _ 配列1, _     ←ここにエラーが出る 配列2, _ 配列3 _ } ---------------------------------------- 回答よろしくお願いします。

  • C# 多次元配列の要素数の変更

    現在、C#2005にて開発を行っているものです。 最近C#を始めたばかりで、分からないことだらけです。 以前はVBで開発を行っており、配列の要素数を変更することなど容易だと思っていたのですが、そう簡単にはいかなそうです。 VBではRedimがあったのですが、C#にはRedimがありません。 そこでネット等で調べてみたところ、Array.Resizeで配列の要素数が変更できることがわかりました。 ですが、1次元配列にしか対応されていない気がします。 現在開発しているシステムでは明細データの履歴情報を登録する部分を担当しています。配列A[変更前又は変更後,明細(行)No.,列No.](3次元配列)を使用して変更前と変更後の明細データを比較しております。 呼び出した明細データの明細行数分のみ(なので可変です)、配列Aの要素数を変更していきたいのですが、どなたかご教授頂けませんでしょうか。 大変お手数をお掛け致しますが、よろしくお願い致します。

  • 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()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。

  • ReDim Preserveできなかった配列をUBOUND……

    VBScriptでプログラムを組んでおります。 初心者なので言葉の使い方が間違っているかもしれませんがご容赦ください。 ASPでDBにアクセスして、このときにReDim Preserveを使って配列(str)を動的に拡張しながらDBから項目を抽出しています。 この動的に作った配列の項目を表示する際にどうしても項目数が必要なので UBound(str)で要素数を抜き出して使用しています。 DBにデータがあれば問題ないのですが、DBにデータがない場合はUBound(str)実行時に -------------------------- Microsoft VBScript 実行時エラー (0x800A0009) インデックスが有効範囲にありません。: 'ubound' -------------------------- と表示されてしまいます。 これを回避するにはDBから1つの項目を抽出する度に+1するような変数を作れば事足りるとは思いますが、 そうすると配列内の項目を表示する関数の引数を増やすことになり、少し納得がいきません。 Dim str() において Redim str(1)をしたかしてないかを見分ける方法を教えてくださいませんか。 ……無ければ「無い」と仰ってくれれば助かります。 では失礼します。 お時間があればご協力宜しくお願いします。