Quantcast
Channel: dictionaryタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 99

Mac版ExcelでVBAのDictionaryを使えるようにするまで

$
0
0

Mac版のExcelを使ってVBAを開発していると使えない機能があって嫌になることが投げ出したくなることが、VBAの勉強を初めて1週間で、すでに2回もありました。(いやもっとあったけど、Macに限る話じゃないからカウントしません。)

1つ目は、ユーザーフォームを開発できない
これ致命的じゃないでしょうか?マイクロソフトさん。2011年のMac版Excelでは使えていたみたいですけど、2016年版くらいから使えなくなったという、後のバージョンで使えなくなるというマイクロソフトさんお得意の、機能を減らして新バージョンを購入させる戦法ですね。。

2つ目は、Mac版ではDictionaryが使えないということ。これも致命的というか、もうVBAはMacで開発できない、動かないと言っているようなもの。ユーザーフォームが使えないのは妥協しても流石に根幹的な機能であるDictionaryが使えないのは、許せなかったので(というかそれくらいで勉強をやめてしまっては勿体無いので)少し調べてみたら、案外簡単にできました。簡単だったと言っても少し手こずったのでやったことまとめてみました。

1、StackoverflowでDictionary.clsとKeyValuePair.clsをダウンロードする
2、以上の2つのファイルをプロジェクトのimportする
3、使う。ただし、For EachでValueを取り出すときは一手間必要

まず1はStackoverflowのこのページへ飛んでVBA (Excel) Dictionary on Mac?
sysmodさんの回答からZipファイルをもらってください。(または直接貼っておきますダウンロード

そして2はプロジェクトを選択して、2つの.clsをimport
(この際、.clsファイルの中のattribute等は一切変更しなくて大丈夫です。)

最後に3ですが、あとはクラスからインスタンス作って、ドット以降自動で候補を上げてくれるようになるんですが、For Each でValueを取り出す時にコンパイルエラー Compile error: ByRef argument type mismatchが出てしまうので一作業が必要。

まず直接変数をItem()の引数にすると上記のエラーが出るので、一度別の変数に格納してから、その変数をItem()の引数として渡せばうまく動くようになります。

For Each vKey In vKeys
Dim k As String: k = vKey
Debug.Print k & " = " & dict.Item(k)
Next

以上、Mac版ExcelでVBAのDictionaryを使えるようにするまででした。
将来的にはユーザーフォームなども開発してみたいので、いずれにしてもWindow環境を検討していますが、しばらくの間はMacで開発できるところまで頑張ってみたいと思っています。


Viewing all articles
Browse latest Browse all 99

Trending Articles