以前 mixi で書いたもの.

以前, mixi で書いたものを,参照しようとおもったら
mixi は日記検索という,車のエアコンくらい必要なものが
欠如していたので,コレはヤバイ!いずれデータの海に埋もれてしまうぞ!
と,危機感を募らせたので,こっちへ輸出しますた.

で,肝心の内容.

今日はぶいヴぃーをちょっとまともに使う方法を
おしえちゃうぞっ☆

***** VBA で確認しますた。

VBA でハッシュテーブルを使う。

Dim hash as Variant
set hash = CreateObject("Scripting.Dictionary")

こんな風にすると

uha = hash("uha")

という具合に使えるよ。

コレクションでもいいじゃん。
な人々にコレクションより優れている
理由を述べるよ。

コレクションだと下記の状況
(ハッシュテーブルちっくにつかった場合よくあるコト)
でコンパイルエラーになるよ。

'' とあるコード

dim coll as Collection
set coll = new Collection

' val はどこかで定義されている。
coll.add(val, "Key1")

' コンパイルエラー
' add でセットされたキー以外はダメ
coll("Key2") = val

' コンパイルエラー
' 値には代入できない。
coll("Key1") = 10

' しかたない、 add メソッドで入れるか。

' コンパイルエラー
' すでにあるキーには add メソッドは使えない。
coll.add(10, "Key1")

Scripting.Dictionaryつかうと
dim hash as variant
set hash = CreateObject("Scripting.Dictionary")

hash("Key1") = val

hash("Key2") = val

hash("Key1") = 10

全部問題ありません。

なのでハッシュテーブルを使いたいときは
こっち使いましょう。

コレクションでできることはたいていできる気がします。

ただ For Each の挙動がちょっと変で、

dim buf
For Each buf In hash

とやると buf にはキーの値が入ります。

なので全要素にアクセスするには

dim key
For Each key In hash
  hash(key)
next

とやります。

ういんどーずでおひすのマクロを
書かなければならない人は
覚えておいて損はないかもしれませんよ。 


もう一個.

もう一個は正規表現の使い方ですよ。

なんか使い方がちょっぴり変態ちっくで
VBScript 5.5 のやつを使うことで実現します。
VB と VBScript の差は知りません。
知りたい人は diff でもとってください。

まず VBScript 5.5 を使うために、
参照設定をしなきゃならないです。

そうしたらあとは簡単!コードを書くだけ。

dim reg as VBScript.RegExp
とかやります。

以下分かる人にはこの上ないが、分からない人は置いてきぼりな説明。

if ($str =~ /<(.+?)>/) {
    parser($str)
}

というよくあるような Perl の記述を
VBScript.RegExp をつかって VB に直すと

dim reg as VBScript.RegExp
dim matches as VBScript.MatcheCollection
dim subMatche as VBScript.SubMatches

set reg = new VBScript.RegExp
reg.pattern = "<(.+?)>"

set matches = reg.execute(str)
if (matches.count > 0) then
    ' マッチしますた。
    set subMatche = matches.item(0).SubMatches
    call parser(subMatche.item(0))
endif

とかけるわけであります。
これで instr を駆使したり mid だとかを駆使しなくて
すむのです。
やったね! 

内容が 2007 年くらいのものなので,ひどいですが,まあ
情報は確かなので使う分には問題ないかと.