「 配列の中身をあいうえお順に並び替えたいだけなのに、なんでこんなにコードが長くなるの…?」
私もVBAを学び始めたばかりの頃、同じように悩んでいた時期がありました。
インターネットで「VBA 配列 ソート」と検索すると、For…Next構文が何重にも重なった「バブルソート」や「クイックソート」といった、複雑で長い解説ばかりが見つかります。
「仕方ない、これを書き写そう…!」と腹を括り挑戦したものの、途中でループ変数の管理が複雑になり、混乱してしまいました。結果として、1時間の作業時間を短縮するつもりが、コードの修正に2時間も費やしてしまうという、本末転倒な失敗を何度も経験したものです。
でも、安心してください。そんな「苦行」はもう不要です。
ArrayListは自動で並べ替えを行う便利なオブジェクト
実はWindowsには、ArrayList(アレイリスト)という、データを管理するための非常に便利な「箱」が元々用意されています。
これは、プロのエンジニアが開発で広く利用している「.NET Framework」という強力な環境の一部です。
難しい理論は省略しますが、この仕組みの優れた点は、バラバラに格納したデータを「.Sort」という命令一つで、一瞬にして整列できる自動整理機能を備えていることです。
【コピペで使える】ArrayListを活用したソートのサンプルコード
それでは、実際に実務で活用できる具体的なコードをご紹介します。
Sub SmartSortExample()
' 1. 「ArrayList」オブジェクトを生成します
Dim myList As Object
Set myList = CreateObject("System.Collections.ArrayList")
' 2. データを箱の中に入れます(例:バラバラな果物リスト)
myList.Add "バナナ"
myList.Add "リンゴ"
myList.Add "イチゴ"
myList.Add "メロン"
' 3. 並び替えを実行
myList.Sort
' 4. 降順に並べ替えたい場合は、以下を有効にします
' myList.Reverse
' 5. 結果をイミディエイトウィンドウに表示します
Dim item As Variant
For Each item In myList
Debug.Print item
Next item
' 後片付け
Set myList = Nothing
End Sub
このコードのポイント
一般的なバブルソートと呼ばれる手法で記述すると、コードは30行から50行ほどになり、構造の理解も難しくなります。
一方、このArrayListを活用すれば、実質的にわずか3行(オブジェクトの生成、データの追加、ソートの実行)で完了します。 これなら簡単ですよね。
さらに、コードの作成やメンテナンスが容易になるだけでなく、処理速度の大幅な向上も期待できます!
使う時の注意点
このArrayListはWindowsの機能を使っているため、Mac版のExcelでは動作しません。
もしWindowsを使っているなら、これを使わない手はありません!
また、ごく稀にPC側で「.NET Framework 3.5」 の有効化設定が必要となるケースがありますが、最近のWindows 10や11であれば、ほとんどの環境でそのまま動きます。
まとめ
「プログラミングは難しい」と思われがちですが、大切なのは「すでに用意されている便利な道具」をいかに見つけ、どのように組み合わせるかという点にあります。
それこそが、実務の現場で強く求められる実践的なスキルと言えるでしょう。
日々の業務効率化に、ぜひお役立てください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント