ちょっと釣り気味なタイトルですが。。。
実はずっとMacのExcelVBAでDictionaryオブジェクトが使えなくて困っていました。
Dictionaryオブジェクトというのは、WindowsのVBAで用意されているオブジェクトで、ユニークなキーと内容をセットで保存できるオブジェクトで別名辞書オブジェクトなんて言われることもあります。
これを使うと、ある列の値をユニークにしたり、ちょっととっておいてあとでキーをくるくる回して中身を拝借なんてことが簡単にできてしまいます。
難しい言葉で言うと連想配列 - Wikipediaなんて言うそうです。
使いかた
結論だけ先に書いてしまうと、以下の素晴らしい記事の中にあるコードをコピーして、クラスモジュールにペトリと貼り付けるだけです。Office 2011 for Mac Dictionary replacement
やってみると、うぉ!と声が出るほど素晴らしいです。
と言ってもなんのことだかわからない方もいるかと思いますので、もう少し詳しく。
サイトにアクセスして、該当のコードをコピーします。
Excelを立ち上げて、エディターを立ち上げます。
挿入から、クラスモジュールを挿入します。
クラスモジュールが挿入されたら、コピーしたコードを全て貼り付けます。
これで、Dictionaryオブジェクトのクラスができました。
次に、挿入から標準モジュールを追加します。
標準モジュールから、先ほど作成したDictionaryオブジェクトを呼び出してみます。
こんな感じのコードを書いてテストしてみます。
Rem Dictionaryオブジェクトが動くかテスト Sub test() 'Dictionaryオブジェクトは必ず挿入したクラスの名前で定義する。 Dim MyDicObj As Class1 'キーと内容の変数を宣言 Dim myKey As Integer Dim myValue As String '新しいDictionaryを作る Set MyDicObj = New Class1 'キーを1から10までループ For myKey = 1 To 10 '内容を作る myValue = myKey & "内容" 'Dictionaryにキーと内容を追加 MyDicObj.add myKey, myValue Next myKey 'キーを指定して内容を抽出 MsgBox "5のキーに入っている内容は" & vbNewLine & MyDicObj.items(5) & vbNewLine & "です。" Set MyDicObj = Nothing End Sub
ここでのポイントは2点です。
クラスモジュールを使う場合、必ず変数として、作成したクラスの名前で定義します。
また、使う時には、Newで新しくクラスを作成します。
これはクラスを使うときのお決まりみたいなものなので、覚えてしまいましょう。
クラスの名前とは、エクスプローラーに表記されている名前です。
クラスが正しく定義されていれば、エディターで書いているときに、.を打つと、プロパティが表示されます。
Dictionaryにキーと内容を追加するには、addを使います。
できたら、コードを実行してみます。
キーと内容がセットになって登録されていることがわかります。
サンプルのダウンロード
サンプルのダウンロードは以下から可能です。サンプルダウンロード
最後に
データ容量が大量になったときも問題なく動くのかまだテストしていないので、なんともですが、ある程度のデータ量ならそれなりに動いてくれそうです。Macでどうやって実現しよう!?とかなり困っていたので、とてもとても助かります。
以上です。