質問: ### 前提・実現したいこと vbscriptでちょっとした 業務ツールを作成しているのですが 下記のような二次元配列を 別の配列に絞り込んで代入したいです。 ・aがつくものだけを ao(ii,ll)へ代入させたいです。 aka(0,0)=aリンゴ aka(0,1)=bリンゴ aka(0,2)=aリンゴ aka(1,0)=aバナナ aka(1,1)=bバナナ aka(1,2)=cバナナ aka(1,3)=aバナナ ・ ・ ・ 結果 ao(0.0)=aリンゴ ao(0.1)=aリンゴ ao(1.0)=aバナナ ao(1.1)=aバナナ ・ ・ と aoの配列にaが付くものだけに したいです。 vbsで条件付きで代入する方法をご教授 いただけないでしょうか?
回答: VBSCriptで配列操作は面倒ですね。 とりあえずベタな感じで書いてみましたがこんなんでよいでしょうか? 尚、VBScriptの特性で歯抜けの要素ができるのはご了承ください。 例えば下記のデータではaka(0)には対象データが1個ですが、aka(2)には2個あるので、二次元目の要素数は2個できます。 できますが、aka(0,1)は空データとなります。 ``` Dim aka(2,3) aka(0,0)="aリンゴ" aka(0,1)="bリンゴ" aka(0,2)="dリンゴ" aka(1,0)="aバナナ" aka(1,1)="bバナナ" aka(1,2)="cバナナ" aka(1,3)="aバナナ" aka(2,0)="cバナナ" aka(2,1)="dバナナ" aka(2,2)="eバナナ" Dim cnty Dim cntx Dim xmax Dim flg ' akaと同じサイズの作業領域 ReDim tmp(UBound(aka,1), UBound(aka,2)) ' tmp配列に対象データを抜き出しつつ件数をカウント cnty = 0 xmax = 0 For y = 0 To UBound(aka,1) flg = 0 cntx = 0 For x = 0 To UBound(aka,2) If InStr(aka(y,x), "a") > 0 Then flg = 1 tmp(cnty,cntx) = aka(y,x) cntx = cntx + 1 End If Next If flg = 1 Then cnty = cnty + 1 If cntx > xmax Then xmax = cntx End If End If Next ' ao配列を対象データ数分用意 ReDim ao(cnty - 1, xmax - 1) ' tmpからaoに詰めなおす For y = 0 To UBound(ao,1) For x = 0 To UBound(ao,2) ao(y,x) = tmp(y,x) Next Next ' 結果確認 For y = 0 To UBound(ao,1) For x = 0 To UBound(ao,2) wscript.echo y,x,ao(y,x) Next Next ``` 実行結果 0 0 aリンゴ 0 1 1 0 aバナナ 1 1 aバナナ