Vector-[可変長配列を利用可能にする-ExcelVBA Class Modules]

NAME

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

作成日:2012/04/15更新日:2013/05/10動作環境:[Excel 2000-2016]

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をダウンロードします。

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


HOW TO USE — 使用方法

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

 最初に[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

NameDescriptionSyntax

ATTENTION

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

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


MEMO

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


CONTRIBUTION

寄付歓迎

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


DOWNLOAD

<<—DOWNLOAD Vector—>>


VERSION

Version:1.00 – Sun Apr 15, 2012
Version:1.01 – Tues May 1, 2012
Version:1.02 – Fri May 25, 2012
Version:1.03 – Wed Mar 20, 2013
Version:1.05 – Wed Fri 20, 2013


AUTHOR

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