NAME

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


SYNOPSIS

        Sub Main()
            Dim objVector As New Vector

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

            MsgBox (objVector.Size)
        End Sub
		

DESCRIPTION



AN OUTLINE -- 概要

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

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

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



PREPARATION -- 準備

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

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

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



HOW TO USE -- 使用方法

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

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


EXAMPLE -- 使用例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            For i = 1 To 10
                objVector.Push (i)
            Next
            For i = 1 To 5
                objVector.Push (i)
            Next
                
            Buf = objVector.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/