2010-01-13
■[PC]Excel VBAで連想配列
Excelのデータ整理でHashMapとか連想配列とか辞書とか使えたらうれしい状況になったので、ちょうどそのものなところを参照して無理やりやってみた。Excelオンリー。他のVBAではこの方法は無理。
単純に原理だけ書いておくと、シート1つそれ用に確保して第1列をキーとみなす。データの追加はそのシートへの行の追加を表し、データの更新はその行の更新を表す。もちろんデータの消去はその行の削除と対応している。
キーでの検索はワークシート関数である"MATCH"を用いる。データの取り出しはMATCHで得られた行番号の示す行の第2列の内容を返すことで行う。キーにも値にも文字列以外使えないが、そこはいろいろ駆使してカバー。たとえば3要素の文字列配列を使いたかったら適当に区切り文字を選んで"&"で結合して"Split"で分離。整数値が使いたいなら"CStr"で文字列化して"CDec"で整数化。
詰まったのは、VBって2つの引数を持つ関数、いや"Sub"で定義したからサブルーチンか、を呼び出すとき以下の書式だとはじかれたこと。
Sub SetData(htKey As String, htValue As String) End sub SetData("1","2") ''これはだめ SetData "1","2" ''これはOK Sub GetData(htKey As String) End sub GetData("1") ''これはOK GetData "1" ''これもOK
トラックバック - http://d.hatena.ne.jp/MasaHero/20100113/p1
リンク元
- 18 http://search.yahoo.co.jp/search?p=VBA+連想配列&tid=top_ga1_sa&ei=UTF-8&pstart=1&fr=top_ga1_sa&b=11
- 15 http://www.google.co.jp/search?q=VBA+連想配列+引数&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox-a
- 14 http://www.google.co.jp/search?q=excel+vba+連想配列&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 9 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4TSHM_jaJP342JP342&q=excel+vba+setdata
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=vba hashmap&source=web&cd=5&ved=0CEcQFjAE&url=http://d.hatena.ne.jp/MasaHero/20100113/p1&ei=rvakTvTgDaHNmAXrxp2WCQ&usg=AFQjCNFy_MQ8_vs4e-UfMTraqG36x_YSmA&sig2=IBc9JS-ByZ_wF7qP_p-13w
- 8 http://www.google.co.jp/search?hl=ja&q=vba+連想配列+複数キー&lr=&aq=f&oq=
- 8 http://www.google.co.jp/url?sa=t&rct=j&q=vba+hashmap&source=web&cd=4&ved=0CDoQFjAD&url=http://d.hatena.ne.jp/MasaHero/20100113/p1&ei=6A3LToKqFKaKmQXHlrynDQ&usg=AFQjCNFy_MQ8_vs4e-UfMTraqG36x_YSmA
- 7 http://search.yahoo.co.jp/search?p=VBA+hashmap&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8
- 7 http://www.google.co.jp/search?q=連想配列 VBA &hl=ja&lr=&start=10&sa=N
- 6 http://www.google.co.jp/search?hl=ja&q=Excel+VBA+連想配列&revid=1933045800&ei=mrvqS7qCLYHi7AOd5Mi_Cg&sa=X&oi=revisions_inline&resnum=0&ct=broad-revision&cd=7&ved=0CFMQ1QIoBg






