VBSCriptで配列操作は面倒ですね。
とりあえずベタな感じで書いてみましたがこんなんでよいでしょうか?
尚、VBScriptの特性で歯抜けの要素ができるのはご了承ください。
例えば下記のデータではaka(0)には対象データが1個ですが、aka(2)には2個あるので、二次元目の要素数は2個できます。
できますが、aka(0,1)は空データとなります。
VBScript
1Dim aka(2,3)
2aka(0,0)="aリンゴ"
3aka(0,1)="bリンゴ"
4aka(0,2)="dリンゴ"
5aka(1,0)="aバナナ"
6aka(1,1)="bバナナ"
7aka(1,2)="cバナナ"
8aka(1,3)="aバナナ"
9aka(2,0)="cバナナ"
10aka(2,1)="dバナナ"
11aka(2,2)="eバナナ"
12
13Dim cnty
14Dim cntx
15Dim xmax
16Dim flg
17
18' akaと同じサイズの作業領域
19ReDim tmp(UBound(aka,1), UBound(aka,2))
20
21' tmp配列に対象データを抜き出しつつ件数をカウント
22cnty = 0
23xmax = 0
24For y = 0 To UBound(aka,1)
25 flg = 0
26 cntx = 0
27 For x = 0 To UBound(aka,2)
28 If InStr(aka(y,x), "a") > 0 Then
29 flg = 1
30 tmp(cnty,cntx) = aka(y,x)
31 cntx = cntx + 1
32 End If
33 Next
34 If flg = 1 Then
35 cnty = cnty + 1
36 If cntx > xmax Then
37 xmax = cntx
38 End If
39 End If
40Next
41
42' ao配列を対象データ数分用意
43ReDim ao(cnty - 1, xmax - 1)
44
45' tmpからaoに詰めなおす
46For y = 0 To UBound(ao,1)
47 For x = 0 To UBound(ao,2)
48 ao(y,x) = tmp(y,x)
49 Next
50Next
51
52' 結果確認
53For y = 0 To UBound(ao,1)
54 For x = 0 To UBound(ao,2)
55 wscript.echo y,x,ao(y,x)
56 Next
57Next
実行結果
0 0 aリンゴ
0 1
1 0 aバナナ
1 1 aバナナ