Tree

Tree-[親子関係をツリー表示する-ExcelVBA Class Modules]

NAME

Tree– [Treeクラスモジュール]

作成日:2013/11/10更新日:2015/07/20動作環境:[Excel 2000-2016]

SYNOPSIS

        Sub Main()
            Dim objTree As New Tree

            Call objTree.Add("A", "B")
            Call objTree.Add("B", "C")
            Call objTree.Add("J", "L")
            Call objTree.Add("C", "F")
            Call objTree.Add("C", "G")
            Call objTree.Add("H", "I")
            Call objTree.Add("C", "F")
            Call objTree.Add("C", "G")
            Call objTree.Add("E", "F")
            Call objTree.Add("J", "L")
            Call objTree.Add("J", "C")
            Call objTree.Add("C", "T")
            Call objTree.Add("H", "J")
            Call objTree.Add("B", "D")
            Call objTree.Add("D", "E")

            objTree.TreeView ("D1")
        End Sub

DESCRIPTION


AN OUTLINE — 概要

 親子関係をツリー表示したり親の値や子の値を取得するクラスモジュールです。
 このクラスモジュールは「親、子」と関係を入力するだけでツリー表示を行ったり、任意の値に対して子が存在するかや親がいるかなどを取得することが可能です。

主な機能:
・「親、子」関係を入力するだけでツリー表示化を行います。
・任意の値に子が存在するか親が存在するかを取得し合わせて子や親の一覧を取得します。
・並び順に関係なく「親、子」関係を構築することが出来ます。


PREPARATION — 準備

[DOWNLOAD] から、本ExcelBookをダウンロードします。

ダウンロードが完了したらzipファイルを解凍してください。そこに実行ファイルが含まれています。


HOW TO USE — 使用方法

 ダウンロードが完了したらマクロを有効にして開いてください。そこにサンプルモジュールと本モジュールが含まれています。
※クラスをエクスポート、インポートする事で別のExcelBookでも使用することが出来ます。

 最初に[Dim objTree As New Tree]を宣言し、オブジェクトを使用可能にします。
 オブジェクトを[Dim objTree]とした場合の記述方法は以下の通りです。

        Dim objTree As New Tree

  

○親子関係を追加「Add」メソッド

 親子関係を追加するには、「Add」メソッドを使用します。
 objTree.Add(親,子)と入力し親子関係の値を追加します。
注:親子関係を追加する順番は関係ありません。ツリー構成時に評価します。

        objTree.Add("A", "B")

  

○親子関係を追加「Add」メソッド。其の弐(無限ループチェック機能)

 親子関係を追加するときに、その親子関係が無限ループを発生させるかをチェックします。
 objTree.Add(親,子,True)と入力し親子関係の値を追加します。
注1:無限ループが発生する場合は対象の親子関係が記入されたメッセージボックスが表示されます。
注2:チェックが走りますので処理は重たくなりますが、体感で感じられる差ではないので、心配な方は付ける事を推奨しています。

        objTree.Add("A", "B", True)

  

○ツリー表示「TreeView」メソッド

 親子関係のツリーを表示するには、「TreeView」メソッドを使用します。
 objTree.TreeView()と入力します、引数には表示を開始するセル位置を指定します。

 また指定した値からの親子関係ツリーを表示するには、引数にツリー展開したい値を指定します。
注1:引数を入力しなければ全てのツリー構成を展開し、指定すれば指定した値以降のツリーを展開します。

        objTree.TreeView("A1")
objTree.TreeView("A1", "B")

  

○最上位の親一覧を取得「GetTopRoots」メソッド

 構成した親子関係から最上位の親一覧を取得するには、「GetTopRoots」メソッドを使用します。
 objTree.GetTopRoots()と入力し戻り値は[Variant]型となります。戻り値は省略可能。

 また指定した値のみの最上位親一覧を取得したい場合は、引数に対象の値を指定します。
注1:引数を入力しなければ全ての最上位の親一覧を取得し、指定すれば指定した値の最上位の親一覧を取得します。

        value = objTree.GetTopRoots()
value = objTree.GetTopRoots("F")

  

○指定した値の親一覧を取得「GetRoots」メソッド

 指定した値の親一覧を取得するには、「GetRoots」メソッドを使用します。
 objTree.GetRoots()と入力し引数には値を入力。戻り値は[Variant]型となります。戻り値は省略可能。

        objTree.GetRoots("B")

  

○指定した値の子一覧を取得「GetBranchs」メソッド

 指定した値の子一覧を取得するには、「GetBranchs」メソッドを使用します。
 objTree.GetBranchs()と入力し引数には値を入力。戻り値は[Variant]型となります。戻り値は省略可能。

        objTree.GetBranchs("A")

  

○指定した値の親の存在をチェック「CheckRoot」メソッド

 指定した値の親が存在するかをチェックするには、「CheckRoot」メソッドを使用します。
 objTree.CheckRoot()と入力し引数には値を入力。戻り値は[Boolean]型となります。戻り値は省略可能。

        objTree.CheckRoot("B")

  

○指定した値の子の存在をチェック「CheckBranch」メソッド

 指定した値の子が存在するかをチェックするには、「CheckBranch」メソッドを使用します。
 objTree.CheckBranch()と入力し引数には値を入力。戻り値は[Boolean]型となります。戻り値は省略可能。

        objTree.CheckBranch("A")

  


EXAMPLE — 使用例

例1:親子関係を構築しツリー上に表示する。

       Sub Sample()
            Dim objTree As New Tree

            Call objTree.Add("A", "B")
            Call objTree.Add("B", "C")
            Call objTree.Add("J", "L")
            Call objTree.Add("C", "F")
            Call objTree.Add("C", "G")
            Call objTree.Add("H", "I")
            Call objTree.Add("C", "F")
            Call objTree.Add("C", "G")
            Call objTree.Add("E", "F")
            Call objTree.Add("J", "L")
            Call objTree.Add("J", "C")
            Call objTree.Add("C", "T")
            Call objTree.Add("H", "J")
            Call objTree.Add("B", "D")
            Call objTree.Add("D", "E")

            objTree.TreeView ("D1")
        End Sub

  

例2:親子関係を構築しツリー上に表示する。其の弐

        Sub Sample()
            Dim objTree As New Tree
            Dim i As Long

            For i = 1 To 15
                Call objTree.Add(Cells(i, 1), Cells(i, 2))
            Next i

            Call objTree.TreeView("D1")
        End Sub

  

例3:親子関係を構築しツリー上に表示する。其の三(無限ループチェック機能付き)

        Sub Sample()
            Dim objTree As New Tree

            Call objTree.Add("A", "B", True)
            Call objTree.Add("B", "C", True)
            Call objTree.Add("J", "L", True)
            Call objTree.Add("C", "F", True)
            Call objTree.Add("C", "G", True)
            Call objTree.Add("H", "I", True)
            Call objTree.Add("C", "F", True)
            Call objTree.Add("C", "G", True)
            Call objTree.Add("E", "F", True)
            Call objTree.Add("J", "L", True)
            Call objTree.Add("J", "C", True)
            Call objTree.Add("C", "T", True)
            Call objTree.Add("H", "J", True)
            Call objTree.Add("B", "D", True)
            Call objTree.Add("D", "E", True)
            Call objTree.Add("F", "E", True)
    
	        objTree.TreeView ("D1")
        End Sub

  

例4:指定した値の親一覧を取得し表示する。

        Sub Sample()
            Dim objTree As New Tree
            Dim str As Variant
            Dim root As Variant
            Dim i As Long

            For i = 1 To 15
                Call objTree.Add(Cells(i, 1), Cells(i, 2))
            Next i

            root = objTree.GetRoots("B")
            If objTree.CheckArray(root) = 1 Then
                For Each str IN root
                    Debug.Print str
                Next str
            End If
        End Sub

  

例5:指定した値の子一覧を取得し表示する。

        Sub Sample()
            Dim objTree As New Tree
            Dim str As Variant
            Dim branch As Variant
            Dim i As Long

            For i = 1 To 15
                Call objTree.Add(Cells(i, 1), Cells(i, 2))
            Next i

            branch = objTree.GetBranchs("B")
            If objTree.CheckArray(branch) = 1 Then
                For Each str IN branch
                    Debug.Print str
                Next str
            End If
        End Sub

  

例6:最上位の親一覧を取得し表示する。

        Sub Sample()
            Dim objTree As New Tree
            Dim str As Variant
            Dim root As Variant
            Dim i As Long

            For i = 1 To 15
                Call objTree.Add(Cells(i, 1), Cells(i, 2))
            Next i

            root = objTree.GetTopRoots
            If objTree.CheckArray(root) = 1 Then
                For Each str In root
                    Debug.Print str
                Next str
            End If
        End Sub

  

例7:最上位の親一覧を取得し表示する。其の弐(指定した値の最上位親一覧取得)

        Sub Sample()
            Dim objTree As New Tree
            Dim str As Variant
            Dim root As Variant
            Dim i As Long

            For i = 1 To 15
                Call objTree.Add(Cells(i, 1), Cells(i, 2))
            Next i

            root = objTree.GetTopRoots("L")
            If objTree.CheckArray(root) = 1 Then
                For Each str In root
                    Debug.Print str
                Next str
            End If
        End Sub

  


REFERENCE

NameDescriptionSyntax

ATTENTION

・本ソフトを利用した事によるいかなる損害も一切の責任を負いません。

・感想や要望、不具合などありましたら、作者までご連絡ください。


MEMO

本ソフトの[readme.txt]に「NAME/VERSION/AUTHOR/COPYRIGHT」が記載されています。


CONTRIBUTION

寄付歓迎

 本モジュールはフリーですが、「このモジュールのおかげで、素晴らしいソフトが作れた」など、寄付をしていただける方がいましたら、作者宛までご一報ください。


DOWNLOAD

<<—DOWNLOAD Tree—>>


VERSION

Version:1.00 – Sun Nov 10, 2013
Version:1.03 – Mon Jul 20, 2015 | 無限ループチェック機能を追加 | [TreeView]、[GetTopRoots]メソッドに値を指定する機能を追加。


AUTHOR

Syunzi Shimohata < webmaster@taru-net.jp > https://www.taru-net.jp/