VBAの配列でpushやpopがしたい!
Excelで繰り返し作業を行うときは、マクロが便利ですね。
「マクロの記録」ボタンを使えば初心者にも簡単にコードを扱えます。
でも、ちょっと複雑な作業を行おうとすると、マクロの記録だけでは難しい。
プログラムとしてVBAを学ぶ必要が出てきます。
ただ、そこで残念なのはVBAの言語設計が古い事です。
現在主流のスクリプト言語ーJavaScript, Python, Ruby などーは本格的なオブジェクト指向で、多くの便利な機能を提供してくれます。
たとえば、配列の末尾に要素を追加する場合を考えてみましょう。
Rubyなら1行で終わりです。
myArray.push(newValue)
しかし、VBAだと…
newIndex = Ubound(myArray) + 1 ReDim Preserve myArray(newIndex) myArray(newIndex) = newValue
…いかにも冗長で嫌になりますね!
でも、Excelでマクロを書くには、VBAを使うしかありません。
では、どうするか?
クラスモジュールを利用したカスタム配列クラスの実装
VBAは、クラスモジュールを使って独自のクラスを定義できます。
この機能を使って、Rubyのような便利な配列メソッドをVBAでも使えるように実装しました。
Dim numbers As ArrayCls, friends As ArrayCls, objects As ArrayCls
' createArray関数を使ってインスタンスを初期化します。
Set friends = createArray("John", "Mike", "Jane")
Set numbers = createArray(0, 5, 4, 3, 2, 1)
' オブジェクトも扱えます
Set objects = createArray(Application, ThisWorkbook, Err, Nothing)
' pop, push, sort などのメソッドが使えます。
Debug.Print friends.items(2) ' -> Jane
Debug.Print friends.pop ' -> Jane
Debug.Print friends.push("Mary").to_s ' -> John, Mike, Mary
Debug.Print numbers.sort.to_s ' -> 0, 1, 2, 3, 4, 5
全てではありませんが、Rubyの主な配列メソッドを実装してあります。
ワークシート等を介する事なくオンメモリで動作しますので、オブジェクトも扱えます。
実際に私はこれを業務で使用していますが、開発効率が格段に上がりました。
ダウンロード
ご使用にあたって
β版です。お約束ですが、使用は自己責任にてお願いします(MIT/GPL License)。
バグには出来る限り対応致します。
ご意見はコメント欄またはTwitterまで。
ダウンロード
配列クラスモジュールセット配列クラスモジュールインポート済みExcel2003ファイル
インストール方法・使い方
ドキュメントよくある質問(質問募集中)

0 件のコメント:
コメントを投稿