2012年3月12日月曜日

VBA配列クラス ArrayCls の使用方法

インストール

ダウンロード後解凍して下さい。
下記7つのクラスモジュールがインポート済みのエクセルブックが出てきます。

  • ArrayCls
  • Utilities
  • Util_Array
  • Util_Change
  • Util_Exists
  • Util_Operator
  • Util_Search
  • Util_Sort
上記のクラスモジュールを、使いたいエクセルブックにインポートすれば準備完了です。

サンプルコードを動かす

ダウンロードしたエクセルブックには、サンプルコードが付いています。
"sample"モジュールをプロジェクトウィンドウで確認しましょう。
コードを実行し、イミディエイトウィンドウで実行結果を確認してみて下さい。

基本的な使い方

createArray() または Factories.createArray() でインスタンスを生成します。
引数には任意の数の配列要素を渡して初期化することができます。

Dim myArray as ArrayCls
Set myArray = createArray(elm1, elm2, elm3...)
または、直接 New することもできます。
この場合は空の配列が生成されます。

Dim myArray as New ArrayCls


プロパティとメソッド一覧

配列の内容を操作するメソッド(clear, concat, deleteAt 等)は全て破壊的メソッドです。

clear()
配列をクリアして空にします。
自身を返します。

concat(array)
配列同士を連結します。
自身を返します。

Set myArray = createArray(0, 1, 2)
myArray.concat Array(3, 4)     ' Variant型配列を連結します。
Debug.Print myArray.to_s        ' 0, 1, 2, 3, 4

myArray.concat myArray      ' ArrayCls型配列も連結できます。
Debug.Print myArray.to_s     ' 0, 1, 2, 3, 4, 0, 1, 2, 3, 4
deleteAt(pos)
指定した位置の要素を削除して返します。

entity プロパティ
ArrayClsの実体となるVariant型配列の取得・設定を行います。

Set myArray = createArray(0, 1, 2)
vArray = myArray.entity            ' [0, 1, 2] のVariant型配列
myArray.entity = Array(3, 4, 5)
Debug.Print myArray.to_s          ' 3, 4, 5
index(value)
valueと等価な要素のインデックスを返します。
比較はUtilities.opr.equals()メソッドで行います。

items(pos) プロパティ
指定したポジションの値の取得・設定を行います。

join(delimiter)
要素の間に delimiter を挿入した文字列を返します。
delimiter を省略した場合は", "が挿入されます。
オブジェクトは数→文字列→型名の優先順位で変換を試してから出力します。
ただし、配列はJavaScript風のリテラル文字列に変換されて出力されます。

Set myArray = createArray(0, Application, Array(0, 1, 2))
Debug.Print myArray.join              ' 0, Microsoft Excel, [0,1,2]
Debug.Print myArray.join("__")       ' 0__Microsoft Excel__[0,1,2]
length プロパティ
配列の長さを返します。
読み取り専用です。

pop()
配列の末尾から要素を取り除きます。

push(value)
配列の末尾に要素を付加します。
複数の要素を付加する場合は concat を使用して下さい。
自身を返します。

renew(elm1, elm2, elm3, ...)
任意の数の引数を受け取って配列の内容を置き換えます。
自身を返します。

Set myArray = createArray(0, 1, 2)
Debug.Print myArray.to_s                         ' 0, 1, 2
Debug.Print myArray.renew(3, 4, 5).to_s     ' 3, 4, 5
reverse()
配列を降順に並べ替えます。
オブジェクトは数→文字列→型名の優先順位で変換を試した後、比較されます。
ただし、配列はJavaScript風のリテラル文字列に変換された後比較されます。
自身を返します。

Set myArray = createArray(0, "one", Application, Array(0, 1, 2))
Debug.Print myArray.to_s                ' 0, one, Microsoft Excel, [0,1,2]
Debug.Print myArray.reverse.to_s     ' one, [0,1,2], Microsoft Excel, 0
shift()
配列の先頭の要素を取り除いて返します。

slice(pos, pos_or_len, len?)
部分配列を取出します。
第1引数には開始位置を、第2引数には終了位置または長さを指定します。
第2引数が長さの場合は第3引数に True を渡して下さい。

Set myArray = createArray(0, 1, 2, 3, 4, 5)
Debug.Print myArray.slice(2, 3).to_s             ' 2, 3
Debug.Print myArray.slice(2, 3, True).to_s     ' 2, 3, 4
sort()
配列を昇順に並べ替えます。
オブジェクトは数→文字列→型名の優先順位で変換を試した後、比較されます。
ただし、配列はJavaScript風のリテラル文字列に変換された後比較されます。自身を返します。

to_s(delimiter)
join と同じです。

unshift(elm)
配列の先頭に要素を付加します。
自身を返します。

0 件のコメント:

コメントを投稿