TARU-NET.JP

ExcelVBA ClassModules
Tree 動作確認: Excel 2000-2010 更新日: 2015/07/20 Reference Download

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

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

これから付けたい機能:
・ソート機能。親のグループ化。
Tree クラスモジュール
作成日:2013/11/10
更新日:2015/07/20





NAME

            Tree -- Tree クラスモジュール

		



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をダウンロードします。
ダウンロードが完了したらマクロを有効にして開いてください。そこにサンプルモジュールと本クラスモジュールが含まれています。

注:クラスをエクスポート、インポートする事で別のExcelBookでも使用することが出来ます。


HOW TO USE -- 使用方法


最初に[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 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
		
例2:親子関係を構築しツリー上に表示する。其の弐
            Sub Main()
                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 Main()
                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 Main()
                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 Main()
                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 Main()
                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 Main()
                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

Name Description Syntax



ATTENTION

・本クラスモジュールを利用した事によるいかなる損害も一切の責任を負いません。
・感想や要望、不具合などありましたら、作者までご連絡ください。



MEMO

本クラスモジュールの本文中に「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> http://www.taru-net.jp/


COPYRIGHT

Copyright (C) 2013-2015, Syunzi Shimohata. Japan. All Rights Reserved.