• 締切済み

コレクションクラスに対してFor Eachを使えるようにするには

コレクションクラスの持つアイテムを For Each ・・・ Next でぶん回す方法を教えてください。 昔、本に載っていたのを見たのですが、 どーーーーーしても思い出せません! たしか、プロパティを1こ追加して、 object.[_Enum]のような行を追加していたような・・・ よろしくお願いします!

みんなの回答

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

Sub test05() Dim c For Each c In Array("a", "b", "c") MsgBox c Next End Sub こういうものでしょうか。

msx68000
質問者

お礼

imogasiさん ありがとうございます。 実現したかったのは、自作のコレクションクラスに保持しているアイテムを、外部から参照する際にFor Eachで参照 したかったのです。 ですが、あれからいろいろ調べていて、MSDNにようやく下記説明文を発見できました。 For Each … Next のサポート ' NewEnum は コレクションの列挙子の IUnknown インターフェイスを ' 返す必要があります。 Public Function NewEnum() As IUnknown Set NewEnum = mcolEmployees.[_NewEnum] End Function お騒がせしました。

関連するQ&A

  • for each で扱えるコレクションの実装

    こんにちは。 プログラムの保守を請け負っているのですが、独自に実装されているリストクラスがありまして、 それをfor eachで操作できるようにとの指示がありました。 処理系はC++です。 CFooArrayというクラスだとしまして、内部にCFooDataというクラスをdequeで持っています。 要望としては CFooArray arrayFoo ; for each( CFooData fooData in arrayFoo ) { } とできるようにしてほしいとのことですが、そもそもfor eachで扱えるコレクションクラスを どう実装していいのかが分かりません。またdequeを外に出すのはナシと言われました。 どなたかご存じの方がいらっしゃいましたら教えていただけないでしょうか。 参考サイトでも紹介していただければ幸いです。

  • for each for in

    Javascript初心者です。 for each とfor inの違いを調べているのですが、どれもオブジェクトのプロパティを取る というぐらいしか理解できていません。 お手数ですが、具体的な違いや使い方など教えていただけないでしょうか? よろしくお願いします。

  • コレクションってなんですか?

    UWSCを勉強しています。そこでGETOLEITEMという関数が何を取得するのかわかりません。戻り値はゲットしたコレクションの数と書かれていますが、コレクションが何をさしているのかわかりません。これはどういったものなのでしょうか? // コレクションの取得 戻値 = GETOLEITEM( コレクションプロパティ名 ) 引数   コレクションプロパティ名: COMオブジェクト.コレクション取得プロパティ名 戻値   ゲットしたコレクションの数   習得した物は配列変数の ALL_OLE_ITEM[ ] に格納される (配列はゼロから) // c:\windows下のディレクトリ表示 fs = CreateOLEObj("Scripting.FileSystemObject") gf = fs.GetFolder("c:\windows") for i = 0 to GETOLEITEM(gf.SubFolders)-1 // コレクション取得   print ALL_OLE_ITEM[i].name next

  • For Each ~ Next の動作

    コレクションの操作をするときなどに、 For tmp in testCol   List1.Add tmp Next ってな感じでFor Each文をつかいますよね。 あれって、 For i = 0 To testCol.Count   List1.Add testCol.Item(i) Next i と書くのに比べ、びっくりするほど処理が速いですよね。 いったい、どんな違いがあるのでしょうか。

  • ユーザーフォーム上でFor Each~Next?

    Excelユーザーフォームでマルチページを使用しているのですが テキストボックスに文字(パスワード的なもの)を入力したら マルチページ内の特定ページのコントロールをenabled=trueにしたいのです(通常はenebledがtrue・falseの混合ページです) 先日よりFor Each~Next構文を使い始めたのですが勉強不足『オブジェクト・コレクション』の概念がいまいち理解できません。よろしくお願いします。 ネット上で調べてコピペしたのですがこのままだと他のページ、ページ外のコントロールまで影響するので良い方法をアドバイスしていただけますか?やはりコントロール個別にコードを書くしかないのでしょうか? Private Sub TextPASS_Change() If TextPASS.Value = "aaaa" Then For Each Control In Controls 省略(enabled=true) Next Else For Each Control In Controls 省略(enabled=false) Next End If End Sub

  • セルに対してFor Each~In~Nextを使う

    セルに対してFor Each~In~Nextを使う事は出来ない? シートやブックに対してループする時は Sub aaa() Dim w As Worksheet For Each w In Worksheets MsgBox w.Name Next End Sub 等を使いますが、 A1に「あ」 A2に「い」 A3に「う」 が入っている場合、 Sub bbb() Dim i As Long For i = 1 To Range("a65536").End(xlUp).Row MsgBox Cells(i, 1) Next End Sub で、全ての値を取得できますが、 For~to~nextではなく セルに対してFor Each~In~Nextを使う方法があれば教えてください。 上記のように Dim w As Worksheetは宣言できますが Dim c As Workcellとはできませんでした。 なぜわざわざFor~to~nextでできる事をFor Each~In~Nextでやりたいかと言うと、 シートやブックはFor~to~nextでできるのに、セルはFor~to~nextができない理由を知りたいからです。 ご回答よろしくお願いします。

  • 構造体配列の特定のメンバーをFor~Eachで

    みなさんこんにちは。昔Vb6を少々やっていましたが ここ数年遠のいていました。 必要に迫られ最近Vb2010を勉強しはじめた50歳です。 サンプルの通り3つのメンバーを持つ構造体配列があり、 メンバーData3の合計を得るのに、ループで回して 計算してましたが、これを For~Next ではなくFor~Each で やれないかと考えておりました。配列の要素の個数が不定 な場合に便利だと思ったからです。 サンプルの ???_1が「型」で ???_2が「コレクション」と なるように記述するのだということまではわかりますが、 具体的な記述がわかりません。For~NetでもDo~Loopでも 他にも方法があるのは知っています。勉強の為に、For~Eachでの やりかたを知りたいのです。また、構造体配列ではなく、多次元配列での 特定の次元要素を同様に処理する方法も知りたいです。 どなたかご教授お願いできれば幸いです。 ネット上でそれなりに調べましたが、目的に沿う情報は みつけることができません。 Public Class Form1 Structure STR Dim Data1 As Double Dim Data2 As Double Dim Data3 As Double End Structure Private Sub Button1_Click(sender As System.Object, _ e As System.EventArgs) Handles Button1.Click Dim Str_1(10000) As StR Dim Rn As New System.Random() For i = 0 To 9999 Str_1(i).Data3 = Rn.Next(100) Next '以降いろんな処理をやる ' ' 'このあと For~Nex ではなくFor Each をつかってメンバーDat3の合計を得るには? Dim sum As Double For Each X As ???_1 in ???_2 '???_1 と ???_2 の記述がわからない sum += X Next Label1.Text = sum.ToString End Sub End Class

  • Collectionクラスへ値を代入するときの型変換

    J2SE 5.0でオートボクシング機能が追加されて云々かんぬん。。。そもそも、Collectionクラスへ値を代入するときには、なぜプリミティブ型からオブジェクト型へ変換しなければならないのでしょうか。データとして合わないから。くらいにしかわかっていません。Javaに詳しい方、宜しくお願い致します。

  • VB6のコレクション

    Dim FileSys As Object Dim Prox As Object Dim fj As Object Set FileSys = CreateObject("Scripting.FileSystemObject") Set Prox = ColFileSys.Files For Each fj In Prox ~ 質問を簡単にするために端折ってあります。 上記のコードで動いているプログラムがあるのですが filesはfileコレクションを返すとあり、上記のコードの宣言を Dim Prox As Collection と変更しました。 これで理論的にはうまく動くかと思ったのですが 「型が一致しません」のエラーになりました。 Collectionの運用法に関しては間違っていないと思いますが 何が原因でエラーなのかさっぱり分かりません。 なお、Collectionに関しては次のサイトを参考にしました。 そこをスクロールしていって上から4つ目のキーというところに用法があります。 http://homepage1.nifty.com/rucio/main/shokyu/jugyou23.htm

  • 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++でやりたいのですが、可能でしょうか。 もしよければ、コレクションに格納する方法を教えてください。 よろしくお願いします。

専門家に質問してみよう