• 締切済み

VB COLLECTIONについて

VB collectionで  dim col1 as collection と定義した時  ウォッチで見た時    col1 |--- Item1 | |--- Fild1  値 | |--- Fild2  値 | |--- Fild3  値 |--- Item2 このFild1~Field3の名前をセットするにはどうしたらいいの でしょうか? クラスで名前を一つずつ設定すれば出来るのですが、 それを動的に行いたいのです。 配列 AA(2)に AA(0)="Name",AA(1)="Address1",AA(2)="Address2"  col1.add aa, "1" とやってみても(0)(1)(2)となってしまいます。 もし動的にセット出来れば、テーブルの列名を取得して その都度セット出来るようにしたいのですが。

みんなの回答

noname#140971
noname#140971
回答No.2

補足: 先の回答の一連の手続きは、クラスモジュールでも実現できます。

noname#140971
noname#140971
回答No.1

|--- Item1 | |--- Fild1  値 | |--- Fild2  値 | |--- Fild3  値 |--- Item2 このような、構造体の値セットに関する質問かと思います。 Private Sub Command1_Click()   Items(0).ItemName = "Item1"   Items(1).ItemName = "Item2"   fldNames(0) = "Field1"   fldNames(1) = "Field2" End Sub Private Sub Command2_Click()   SetColAmount "Item2", "Field1", 10   SetColAmount "Item2", "Field2", 20   Debug.Print Items(1).fldAmount(0)   Debug.Print Items(1).fldAmount(1) End Sub Private Function SetColAmount(ByVal itmName As String, ByVal fldName As String, ByVal intAmount As Integer) As Boolean   Dim I As Integer   Dim J As Integer   Dim N As Integer   Dim M As Integer      N = UBound(Items())   M = UBound(fldNames())   For I = 0 To N     If StrComp(Items(I).ItemName, itmName, 1) = 0 Then       For J = 0 To M         If StrComp(fldNames(J), fldName, 1) = 0 Then           Items(I).fldAmount(J) = intAmount           J = -1           Exit For         End If       Next J       Exit For     End If   Next I   SetColAmount = CBool(J = -1) End Function Command1_Click()→Command21_Click() ですと、当然のことながら次のような結果を得ます。 [イミディエイト] Item2/Field1・・・10 Item2/Field2・・・20 単なる服飾デザイナでプログラマではありません。 が、素直にこのように書いたらダメなんでしょうか・・・。 これですと、動的にも宣言できると思いますが・・・。

NYAN99
質問者

補足

すいません。分かりづらくて。 恐らくイメージは伝わっていると思うのですが。・・ たとえば、 テーブルAというものがあり、フィールドの項目数が3列だとします。 フィールド0番目の項目名"Name" の値 あああ フィールド1番目の項目名"Address1" の値 日本 フィールド2番目の項目名"Address2" の値 東京 ウォッチで見た場合(結果イメージ) |--- Item1 | |--- Name    あああ | |--- Address1  日本 | |--- Address2  東京  |--- Item2 Itemの数はデータ数で増幅されてという感じになって欲しいのです。 ちなみにVB6.0で動けるように ItemNameというのが使えないのですが・・これはVB6.NETですか?

関連するQ&A

  • VBSでのコレクション

    教えてください。 VBのコレクション配列はVBSにはあるのでしょうか? クラスオブジェクトをコレクション配列に入れたいのですが.... 例: Class myclass : : End Class Sub Main() dim col as Collection dim mycl mycl = new myclass col = new myClass for i =0 to max myclass.xxx = xxxx col.add i mycl next End Sub 以上簡単ですが、myclをコレクション配列に格納したいのですが、

  • Collectionによる多次元配列

    VBAでCollectionを二つ使用し、 値が入ったCollectionをもう片方のCollectionに入れて2次元配列のようにしたいのですが、 やり方がいまいちわかりません。 確か昔にそういった使い方をした記憶があるのですが、 ネットで調べてもみかけないので困っています。 Dim colA As Collection Dim colB As Collection Set colA = New Collection Set colB = New Collection colB.Add ("A") colB.Add ("B") colB.Add ("C") ※ colA.Item(1) = colB. Set colA = Nothing Set colB = Nothing 上記の※の箇所をどうすれば入れられるのでしょうか。 宜しくお願い致します。

  • VB.netのコレクションについて

    VB.netのコレクションについて質問です。 キーとオブジェクトのセットで追加できる配列ですが、例えば、 いちご,100 りんご,200 バナナ,300 とセットするとして、いちごだったら、100+10 というように、キーで検索してオブジェクトの値を更新していくというプログラムを書きたいのですが、調べたらすでにあるキーに対してオブジェクトを更新したい場合、一度そのセットを削除してから追加する。というようなことが書いてあるサイトもあったのですが、このような更新することについて書いてあるものが少なく、本当に削除してから追加しなければいけないのかお聞きしたいのですが、そのままキーを指定して値を入れることはできないのでしょうか? よろしくお願いいたします。

  • 構造体をコレクションに入れて扱いたいのですが…

    当方、Windows2000(SP2) + VB6.0(SP5) の環境です。 今、私が困っている事なのですが、宣言した構造体に入れた値を、 構造体ごとコレクションに追加して扱いたいと言う所なのです。 しかし最初の「構造体をコレクションに追加する」と言う時点で躓いています。 もしかして、構造体ごとコレクションに登録すると言う事は出来ないのでしょうか? 私が考えて書いたコードは以下のようになっております。 --- 標準モジュールにて構造体を宣言 --- Public gcolAddData As New Collection 'Collectionオブジェクト Public Type AddData '各データをレコードで獲得 varName As Variant varPostCd As Variant varAddress As Variant varTellNum As Variant End Type Public gAddData As AddData --- 以下が実際に走っているソースです --- '構造体に取得する With gAddData --- ここで構造体の各変数に値を入れています --- End With '構造体をコレクションに格納 gcolAddData.Add gAddData 普通にAddしてしまう方法なのですが、これでは駄目なのでしょうか。 方法があるのであれば教えて頂けると嬉しいです。 また、これは念の為の確認としてお聞きしたいのですが、 コレクションに追加した構造体を受け取りたい時は 以下のようにSet文で構わないですよね? Dim tmpAddData As gcolAddData Set tmpAddData = gcolAddData.Item(0) 何分、まだこの段階まで進めていない状態ですので……(汗 どうぞよろしくお願いします。

  • VB.netでコレクションを変更させないようにするには

    C#、VB.net(.net framework 2.0)で開発しております。 FamilyクラスのListフィールド_peopleには外部からの変更操作(Add、Remove等)を許可したくないのですが、 以下のようにReadOnlyのプロパティを設けても、代入操作はできないもののコレクション自体への変更は可能となってしまいます。 ※family.People.Add(mem) 等 IListやICollectionインターフェースをImplementして独自のコレクションを作り、 AddやRemoveメソッド内で例外を投げたりすることも考えたのですが、 そもそもコンパイルを通したくありません。 こういった場合、どのように実装するのが定石でしょうか? 宜しくお願い致します。 以下コード例 Public Class Family Dim _people As List(Of Member) Public ReadOnly Property People() As Member Get Return _people End Get End Property End Class

  • 配列 シャッフルの高速化をするには?

    お世話になります。 私は今10万個の数字を配列に格納し シャッフルしていく問題を抱えております。 下記のプログラムだと 時間がかかりすぎて実用にたえません。 速くするにはどうすればよろしいでしょうか? Dim colBefore As Collection Dim colAfter As Collection Dim i As Long Set colBefore = New Collection Set colAfter = New Collection For i = 1 To 13 colBefore.Add CStr(i) Next Do Until colBefore.Count = 0 i = Int(Rnd(1) * (colBefore.Count - 1)) + 1 colAfter.Add colBefore.Item(i) colBefore.Remove i Loop For i = 1 To 13 Debug.Print colAfter.Item(i) Next

  • VC++でオブジェクトのコレクション格納

    すみません。 教えてください。 VC++言語を勉強しているのですが、不明点があるため教えていただきたいのです。 <VBサンプル> Set Col = new Collection For i = 1 To nMaxCount Set objIF = New iniFile 'iniファイル設定クラス With objIF .iniDirPath = mstriniDirPath .iniFileName = mstriniFileName nResult = .iniStart 'クラスの実行関数 If nResult < 0 Then iniReadRecStack = nResult Exit For End If ' コレクションにiniファイルクラスオブジェクトを格納する。 col.Add objIF, CStr(Count) Next 上記のようなことをVC++でやりたいのですが、可能でしょうか。 もしよければ、コレクションに格納する方法を教えてください。 よろしくお願いします。

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。

  • Collectionからの型変換について

    いつもお世話になっています。 Collectionについてなのですが、 Collection→配列は、可能ですが、 Collection→List,Mapはできないのでしょうか? ためしに、CollectionにList,Mapそれぞれを格納してみると Object[]で、List,Mapそれぞれの値を取得することはできるようなのですが。 以下が実行時のソースです。 //MapからCollection Map map = new HashMap(); map.put("tet","ttt"); map.put("a", "arigato~"); //MapをCollectionに格納する Collection co1 = java.util.Arrays.asList(map); //Object型配列で取得する Object[] ob1 = co1.toArray(); System.out.println(ob1.length + "/" + ob1[0]); //ListからCollection List list = new ArrayList(); list.add("test"); list.add("arigato~"); //ListをCollectionに格納する Collection co2 = java.util.Arrays.asList(list); //Object[]で取得する Object[] ob2 = co2.toArray(); System.out.println(ob2.length + "/ " + ob2[0]); 表示結果: 1/{a=arigato~, tet=ttt} 1/ {a=arigato~, tet=ttt} 宜しくお願いします。

    • ベストアンサー
    • Java
  • 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)) このようにしてつかえませんか?