プロが教えるわが家の防犯対策術!

Excelのあるシート「シート1」に親子関係が記されたデータがあります。
列の親には親の名前が、子にはカンマ区切りで所属する子の名前が記されています。
<シート1>
親 子
A1 A2,B1,B2,B3
B1 C5
A2 C1,C2,C4
B2 
C1
C2 C3
C4
B3 D1,D3
D1
D2
D3 D2

これを下のシート2のようなツリー構造で親子関係を表現したいです。
1、2、3、4はそれぞれ列で、セルの行と列を変更することで、
ツリーの親子構造を表現します。
<シート2>
1 2 3 4
A1
  A2
    C1
    C2
      C3
    C4
  B1
    C5
  B2
  B3
    D1
    D3
      D2

条件は以下のようになります。
a.シート1の記述順は順不同だが、一番上の行は必ず、一番上の親が来る。
b.一番上の行の親以外は、必ず親を持ちます。逆を言えば、「A1」以外には必ず親が存在し、親をたどると必ず「A1」になります。


そんなに難しくないかとは思うんですが、循環関数を作って考えるのが、今の眠い頭でできなくて…。

「ExcelのVBAでデータをツリー構造に」の質問画像

A 回答 (4件)

#3です。



私がやるとした場合の方法。
・”A1”しか親がないのですから、”親があって子のない”データは無視する。
・親をキーに、子を項目としてDictionaryオブジェクトに放り込む。

⇒データ書き出しをH列~とする。
・まず最初”A1”をセルH1に代入する。
・キー”A1”の項目をセルI2以下に書き出す。
・次にI列を上から取得し、その値のキーがDictionaryにあるかチェックし、
 値があればその項目をJ列に書き出す。
 (この場合I列は上詰めされているので、項目分の行を挿入する。)
・以下J列に対して同じ作業でK列・・・と行挿入~書き出しを行なう。

と言った感じになるのかなと思いましたが、コーティングはしてません。

あくまで私見で可能かどうかはわかりません。
    • good
    • 1

#1&2です。



一番ネックと感じるのは、
>D2
>D3 D2
ここでしょうか。

データを順に見ていくとD2は始め”親”と判断されるでしょう。
ところが次ではD3の”子”となります。

このように”親”であったはずのデータが、後から”子”であったとなった場合に、
それまでのデータ配置を入替えるためのコーティングって、結構複雑な感じがしてます。

なので”作っている”段階であれば、その事に興味がありましたのでコードの提示を求めたわけです。
    • good
    • 1

#1です。



>循環関数を作って考えるのが、
この事が重要だと認識しての回答です。

すなわち、どのような判断をしてどのようにコーティングをしてみたが、
結果どんな感じに出来たのか、或いは出来なかったのか。
その事をやり取りする場であると思います。

そうでなければ「作成依頼」になりますので。
    • good
    • 1

>そんなに難しくないかとは思うんですが、循環関数を作って考えるのが、今の眠い頭でできなくて…。


目が覚めたらまずそれを提示してみて下さい。
    • good
    • 5
この回答へのお礼

そんな回答不要です。
履歴として、他の方にも参考になるんですよ?

お礼日時:2009/02/16 07:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています