| 
    
     |  | はじめまして。 
 現在、あるデータを(ある種の)ツリー構造にするため、
 Excel2007のVBAでコーディングをしているのですが、
 どうしても実現できないので、意見をお借りしたいと思い、
 投稿させていただきました。
 
 構築したいデータ構造とは、
 各ノードに対して、左と右の要素をもち
 親ノード(以下Rootとする)に対して
 左の要素には、ユーザ定義型で準備した変数に、
 右の要素には、Rootと同じ構造をもつか、データがない状態、
 ということを行いたいのです。
 
 また、データの追加は、新規のデータを左の要素にもち、
 これまでのツリーを右の要素(子要素)にもつ、新たな
 
 
 現在のコードを簡略化させたコードが以下になります
 
 ================ 標準モジュール Module1 =====================
 Public Type SomeType
 num As Long
 chars As String
 End Type
 
 ================ クラスモジュール Class1 ====================
 Dim typeValue As SomeType
 
 Dim childObj As Class1
 
 Dim depth As Long
 
 Private Sub Class_Initialize()
 depth = 0
 With typeValue
 .num = 0
 .chars = ""
 End With
 End Sub
 
 Public Function createNestObj(childValue As SomeType) As Class1
 
 Dim newValue As New Class1
 
 With newValue
 
 With .typeValue
 .num = childValue.num + 1
 .chars = childValue.chars & "a"
 End With
 .depth = Me.depth - 1
 Set .childObj = Me
 
 End With
 
 End Function
 
 ========================= 以上 ==========================
 
 このようにしたときに、
 With .typeValue
 の箇所で、コンパイルエラー
 「メソッドまたはデータ メンバが見つかりません」
 が発生してしまいます。
 宣言のDimをPrivateにしても同じコンパイルエラーが発生し、
 また、Publicにすると
 「定数、〜〜、ユーザー定義型および〜〜はオブジェクトモジュールのパブリックメンバとしては使用できません。」
 と出てしまいます。
 
 
 具体的なイメージとしては、
 1+1+1+1
 を
 (1+(1+(1+(1_$))))
 としたいです。
 (+と_は2つの子要素をもつノード、$は要素なし:Nothing、
 カッコ1組で1つのオブジェクト、"1"には実際には複数の情報をもっている)
 
 現在でもクラスモジュールの数が多く、ごちゃごちゃしてきているのと、
 (標準モジュールの量はまだすっきりしています、)
 計算速度が求められる処理なので、
 2つのクラスモジュールを費やして実現することはできるだけ避けたいです。
 (基本はJava使いなので、まだJavaとのクラスの違いに馴染めずにいます。)
 
 改善・改善策でなくとも、全然違うアプローチからでもよいですので、
 意見をいただけたらと思います。
 
 よろしくお願いいたします
 
 |  |