2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« 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です。 »