About
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
Name | Description | Syntax |
---|
ATTENTION
・本ソフトを利用した事によるいかなる損害も一切の責任を負いません。
・感想や要望、不具合などありましたら、作者までご連絡ください。
MEMO
本ソフトの[readme.txt]に「NAME/VERSION/AUTHOR/COPYRIGHT」が記載されています。
CONTRIBUTION
寄付歓迎
本モジュールはフリーですが、「このモジュールのおかげで、素晴らしいソフトが作れた」など、寄付をしていただける方がいましたら、作者宛までご一報ください。
DOWNLOAD
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/