TARU-NET.JP

ExcelVBA ClassModules
Vector 動作確認: Excel 2000-2003 更新日: 2013/05/10 Reference Download

[Collection]オブジェクトを使用した可変長配列用クラスモジュールで、イメージ的には、[C++/vector]、[Java]や[.Net]の[ArrayList]、[Perl]や[PHP]での配列操作に近い感じになります。
また、通常[VBA]での配列操作では、[ReDim]などを使用し配列の拡張を行っていましたが、このクラスでは[Push/Add]するだけで、配列への要素追加が可能。さらに「先頭への挿入/末尾の取り出し/任意位置への挿入」といった機能も付け加えてありますので、直感的に「先入れ後出し/後入れ先出し」などの配列操作が行えます。

それと参考までに、[VBA]の場合[.Net Framework]を読み込んでしまえば、[ArrayList]に近い操作は可能になるので、そっちを利用する方法もあります!!

主な機能:
・自動的に配列サイズを変更する。
・先頭に対して要素を挿入できる。
・先頭、末尾の要素を取り出すと共に、要素を削除することが出来る。
・任意の要素を削除することが出来る。
・配列内にある重複値の取得、および削除が出来る。
Vector クラスモジュール
作成日:2012/04/15
更新日:2013/05/10





NAME

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

		



SYNOPSIS

            Sub Main()
                Dim Vector As New Vector

                Vector.Push(1)
                Vector.Add("a")

                MsgBox (Vector.Size)
            End Sub

		



DESCRIPTION



AN OUTLINE -- 概要


[Collection]オブジェクトを使用した可変長配列用クラスモジュールで、イメージ的には、[C++/vector]、[Java]や[.Net]の[ArrayList]、[Perl]や[PHP]での配列操作に近い感じになります。
また、通常[VBA]での配列操作では、[ReDim]などを使用し配列の拡張を行っていましたが、このクラスでは[Push/Add]するだけで、配列への要素追加が可能。さらに「先頭への挿入/末尾の取り出し/任意位置への挿入」といった機能も付け加えてありますので、直感的に「先入れ後出し/後入れ先出し」などの配列操作が行えます。

それと参考までに、[VBA]の場合[.Net Framework]を読み込んでしまえば、[ArrayList]に近い操作は可能になるので、そっちを利用する方法もあります!!

主な機能:
・自動的に配列サイズを変更する。
・先頭に対して要素を挿入できる。
・先頭、末尾の要素を取り出すと共に、要素を削除することが出来る。
・任意の要素を削除することが出来る。
・配列内にある重複値の取得、および削除が出来る。


PREPARATION -- 準備


[DOWNLOAD]から、本ExcelBookをダウンロードします。
ダウンロードが完了したらマクロを有効にして開いてください。そこにサンプルモジュールと本クラスモジュールが含まれています。

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


HOW TO USE -- 使用方法


最初に[Dim Vector As New Vector]を宣言し、オブジェクトを使用可能にします。
オブジェクトを[Dim Vector]とした場合の記述方法は以下の通りです。
            Dim Vector As New Vector
		
○[Collection]オブジェクト「Vector.Collections」プロパティ
対象とする[Collection]オブジェクトを取得するには、「Vector.Collections」プロパティを使用します。
            Dim Vector As New Vector
            Dim value As Collection
            Set value = Vector.Collections
		
○配列末尾に要素を追加「Vector.Push/Vector.Add」メソッド
配列末尾に要素を追加するには、「Vector.Push/Vector.Add」メソッドを使用します。
Vector.Push(要素)と入力し、配列末尾に要素を追加します。
注:「Vector.Push/Vector.Add」メソッドは同じ動きをします。
            Vector.Push(50)
		
○配列末尾の要素を取得「Vector.Back」メソッド
配列末尾の要素を取得するには、「Vector.Back」メソッドを使用します。
Vector.Back()と入力し、戻り値は[Variant]型となります。
注:配列が空白の場合はエラーとなり、[Null]を返します。
            value = Vector.Back()
		
○配列末尾の要素を取得し、対象要素を削除「Vector.Pop」メソッド
配列末尾の要素を取得し、対象要素を削除するには、「Vector.Pop」メソッドを使用します。
Vector.Pop()と入力し、戻り値は[Variant]型となります。戻り値は省略可能。
注:配列が空白の場合はエラーとなり、[Null]を返します。
            value = Vector.Pop()
		
○配列の先頭に要素を追加「Vector.Unshift」メソッド
配列の先頭に要素を追加するには、「Vector.Unshift」メソッドを使用します。
Vector.Unshift(要素)と入力し、配列の先頭に要素を追加します。
            Vector.Unshift(50)
		
○配列の先頭要素を取得「Vector.Front」メソッド
配列の先頭要素を取得するには、「Vector.Front」メソッドを使用します。
Vector.Front()と入力し、戻り値は[Variant]型となります。
注:配列が空白の場合はエラーとなり、[Null]を返します。
            value = Vector.Front()
		
○配列の先頭要素を取得し、対象要素を削除「Vector.Shift」メソッド
配列の先頭要素を取得し、対象要素を削除するには、「Vector.Shift」メソッドを使用します。
Vector.Shift()と入力し、戻り値は[Variant]型となります。戻り値は省略可能。
注:配列が空白の場合はエラーとなり、[Null]を返します。
            value = Vector.Shift()
		
○配列の指定位置要素取得「Vector.At」メソッド
配列の指定位置要素を取得するには、「Vector.At」メソッドを使用します。
Vector.At(3)と入力し、戻り値は[Variant]型となります。
注:指定数よりも配列サイズが少ない場合はエラーとなり、[Null]を返します。
            value = Vector.At(3)
		
○配列の指定位置要素削除「Vector.Remove」メソッド
配列の指定位置要素を削除するには、「Vector.Remove」メソッドを使用します。
Vector.Remove(3)と入力し、要素を削除します。
注:指定数よりも配列サイズが少ない場合はエラーとなり、[Null]を返します。
            Vector.Remove(3)
		
○配列初期化「Vector.Clear」メソッド
配列の初期化をするには、「Vector.Clear」メソッドを使用します。
Vector.Clear()と入力し、配列を初期化します。
            Vector.Clear()
		
○配列の逆順処理「Vector.Reverse」メソッド
配列の逆順処理をするには、「Vector.Reverse」メソッドを使用します。
Vector.Reverse()と入力し、配列の逆順処理をします。
            Vector.Reverse()
		
○配列の結合処理「Vector.Join」メソッド
配列の結合処理をするには、「Vector.Join」メソッドを使用します。
Vector.Join(",")と区切り文字を入力し、配列の結合処理をします。
注:結合されるのは数値や文字列のみで、配列内に[Array][Object]などがある場合は、空白とみなされます。
注:配列が空白の場合は、空白を返します。
            value = Vector.Join(",")
		
○配列の重複値取得処理「Vector.Repetition」メソッド
配列に含まれた重複値を取得するには、「Vector.Repetition」メソッドを使用します。
Vector.Repetition()と入力し、配列の重複値取得処理をします。
結果は一次元配列で返ります。重複値がない場合は、配列に何も含まれない形で返ります。
注:重複値のチェック対象となるのは数値や文字列のみで、配列内に[Array][Object]などがある場合は、無視され処理されません。
            Vector.Repetition()
		
○配列の重複値削除処理「Vector.Unique」メソッド
配列の重複値を削除するには、「Vector.Unique」メソッドを使用します。
Vector.Unique()と入力し、配列の重複値削除処理をします。
注:重複値のチェック対象となるのは数値や文字列のみで、配列内に[Array][Object]などがある場合は、無視され処理されません。
            Vector.Unique()
		
○配列に含まれる値の個数取得処理「Vector.ArrayCountValue」メソッド
配列に含まれる値の個数を取得するには、「Vector.ArrayCountValue」メソッドを使用します。
Vector.ArrayCountValue()と入力し、配列に含まれる値の個数取得します。
戻り値には配列の値(Key)と個数(Item)が含まれた、[Dictionary/Object]が返ってきますので、[For Each]などを使って中身を展開します。
注:重複値のチェック対象となるのは数値や文字列のみで、配列内に[Array][Object]などがある場合は、無視され処理されません。
            varHash = Vector.ArrayCountValue()
		


EXAMPLE -- 使用例

例1:配列の末尾に要素を追加し、配列の中身を表示する。
            Sub Main()
                Dim Vector As New Vector
                Dim str As Variant
                Dim i As Long

                For i = 1 To 10
                    Vector.Push (i)
                Next

                For Each str In Vector.Collections
                    Debug.Print str
                Next str
            End Sub
		
例2:配列の末尾に要素を追加し、配列の中身を表示する。其の弐
            Sub Main()
                Dim Vector As New Vector
                Dim str As Variant
                Dim i As Long

                For i = 1 To 10
                    Vector.Add (i)
                Next

                For Each str In Vector.Collections
                    Debug.Print str
                Next str
            End Sub
		
例3:配列の先頭に要素を追加し、配列の中身を表示する。
            Sub Main()
                Dim Vector As New Vector
                Dim str As Variant
                Dim i As Long

                For i = 1 To 10
                    Vector.Unshift (i)
                Next

                For Each str In Vector.Collections
                    Debug.Print str
                Next str
            End Sub
		
例4:配列の末尾に要素を追加し、先頭から要素を取り出し表示する。
            Sub Main()
                Dim Vector As New Vector
                Dim i As Long

                For i = 1 To 10
                    Vector.Push (i)
                Next

                For i = 101 To 110
                    Debug.Print Vector.Pop
                    Vector.Unshift (i)
                Next
            End Sub
		
例5:配列の先頭から要素を取り出し、末尾に要素を追加する。
            Sub Main()
                Dim Vector As New Vector
                Dim i As Long

                For i = 1 To 10
                    Vector.Push (i)
                Next

                For i = 101 To 110
                    Debug.Print Vector.Shift
                    Vector.Push (i)
                Next
            End Sub
		
例6:配列の末尾に要素を追加し、逆順にして表示する。
            Sub Main()
                Dim Vector As New Vector
                Dim str As Variant
                Dim i As Long

                For i = 1 To 10
                    Vector.Push (i)
                Next

                Vector.Reverse

                For Each str In Vector.Collections
                    Debug.Print str
                Next str
            End Sub
		
例7:配列の末尾に要素を追加し、[","]を区切り文字として表示する。
            Sub Main()
                Dim Vector As New Vector
                Dim i As Long

                For i = 1 To 10
                    Vector.Push (i)
                Next

                Debug.Print Vector.Join(",")
            End Sub
		
例8:配列に含まれる重複値を削除して表示する。
            Sub Test()
                Dim Vector As New Vector
                Dim str As Variant
                Dim i As Long


                For i = 1 To 10
                    Vector.Push ("")
                Next
                For i = 1 To 10
                    Vector.Push (i)
                Next
                For i = 1 To 10
                    Vector.Push (i)
                Next
                For Each str In Vector.Collections
                    Debug.Print str
                Next str

                Vector.Unique

                For Each str In Vector.Collections
                    Debug.Print str
                Next str
            End Sub
		
例9:配列に含まれる値の個数取得して表示する。
            Sub Test()
                Dim Vector As New Vector
                Dim varHash As Object
                Dim str As Variant
                Dim i As Long


                For i = 1 To 10
                    Vector.Push ("")
                Next
                For i = 1 To 10
                    Vector.Push (i)
                Next
                For i = 1 To 10
                    Vector.Push (i)
                Next

                Set varHash = Vector.ArrayCountValue

                For Each str In varHash.Keys
                    Debug.Print str & "-->" & varHash.Item(str)
                Next str
            End Sub
		
例10:配列に含まれる重複値を取得して表示する。
            Sub Test()
                Dim Vector As New Vector
                Dim Buf As Variant
                Dim i As Long


                For i = 1 To 10
                    Vector.Push (i)
                Next
                For i = 1 To 5
                    Vector.Push (i)
                Next
                
                Buf = Vector.Repetition
                
                For i = 0 To UBound(Buf)
                    Debug.Print Buf(i)
                Next i
            End Sub
		



REFERENCE

Name Description Syntax



ATTENTION

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



MEMO

本クラスモジュールの本文中に「NAME/VERSION/AUTHOR/COPYRIGHT」が記載されています。



CONTRIBUTION

寄付歓迎
本クラスモジュールはフリーですが、「このモジュールのおかげで、素晴らしいソフトが作れた」など、寄付をしていただける方がいましたら、作者宛までご一報ください。
なお受け付けている物は、お金(日本通貨円)、食料(酒/缶詰/お米など)となっております。



DOWNLOAD

<<---DOWNLOAD Vector--->>



VERSION

Version:1.00 - Sun Apr 15, 2012
Version:1.01 - Tues May 1, 2012 | [Unique、ArrayCountValue]メソッドを追加。
Version:1.02 - Fri May 25, 2012 | [Repetition]メソッドを追加。
Version:1.03 - Wed Mar 20, 2013 | [Join]メソッドの不具合修正。
Version:1.05 - Fri May 10, 2013 | 全体の速度を50%向上。エラー発生時の返り値を空白に変更。



AUTHOR

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


COPYRIGHT

Copyright (C) 2012, Syunzi Shimohata. Japan. All Rights Reserved.