« VBAからJScriptのescape()を使う。 | トップページ | VBSファイルの文字コードはシフトJISまたはUnicodeです。 »

2007年9月22日 (土)

VBAからJScriptのArrayオブジェクトのsort()を利用する。

Sub a()
Set sc = CreateObject("scriptcontrol")
sc.Language = "jscript"
sc.AddObject "me", Me
sc.AddCode "function compare(x,y){return(me.compare(x,y));}"
Set ar = sc.eval("new Array()")
ar.push 3
ar.push 5
ar.push 1
ar.push 4
ar.push 2
CallByName ar, "sort", VbMethod, sc.codeobject.compare
MsgBox ar
End Sub

Function compare(x, y)
compare = x - y
End Function

VBAの配列をJScriptのArrayに入れて、VBA側の比較関数を変えると、
配列のN番目の要素の順で配列の集合をソートしたり、
複数キーでソートしたりも、出来ます。

オブジェクトを入れて、比較関数でプロパティを比較すると、
ホットスポットの比較関数のコストが高くなるので、
オブジェクトとプロパティの配列を入れるようにして、
プロパティのカラムを比較するほうがよいでしょう。

« VBAからJScriptのescape()を使う。 | トップページ | VBSファイルの文字コードはシフトJISまたはUnicodeです。 »