4

文字列の配列を入力として受け取り、アルファベット順に並べ替えられた同じ文字列の配列を返す VBScript 関数を作成しています。理想的には、この関数が (例として) uCase 関数とまったく同じように機能することを望みます。

myString = ucase(mystring)

「myString」の値は、その内容の大文字バージョンに置き換えられます。

しかし、テスト スクリプトで配列を設定し、それを並べ替え関数に渡すと、結果を元の変数に代入する型の不一致エラーが発生します。TypeName 関数は、使用している入力変数と並べ替え関数からの出力の両方が同じ型 ("Variant() 」)。

より具体的な作業を行うための私のコード例を次に示します。

Option Explicit
Dim testArray(), thisItem, sortedArray 
ReDim testArray(9)

testArray(0)="Xylophone"
testArray(1)="Elephant"
testArray(2)="Ferret"
testArray(3)="Eel"
testArray(4)="Dinosaur"
testArray(5)="Barracuda"
testArray(6)="Ape"
testArray(7)="Weasel"
testArray(8)="Firebird"
testArray(9)="Phoenix"

WScript.Echo "Starting Array:"
For Each thisItem In testArray
  WScript.Echo "  " & thisItem
Next

' This line will work fine, assigning Variant() to Empty sortedArray
sortedArray = SortArray(testArray)
' This line will generate a type mismatch, assigning Variant() to Variant()
testArray = SortArray(testArray)

WScript.Echo "Sorted Array:"
For Each thisItem In sortedArray
   WScript.Echo "  " & thisItem
Next

WScript.Quit 0

Function SortArray(ByVal inArray)

   Dim a, b, swapVal 

   For a = UBound(inArray) - 1 To 0 Step -1
      For b = 0 To a
         If inArray(b) > inArray(b+1) Then
            swapVal = inArray(b+1)
            inArray(b+1) = inArray(b)
            inArray(b) = swapVal
         End If
      Next
   Next

   SortArray = inArray

End Function 

このサンプル コードをそのまま実行すると、「sortedArray=」で始まる行が正常に機能することがわかります。その下の "testArray=" で始まる行は、型の不一致エラーを生成します。

理想的には、これらの行のいずれかまたは両方が適切に機能するように、この関数が動作することを望みます。(つまり、後で使用するときに、「ああ、別の変数を作成して、元の変数の代わりに出力をそれに割り当てなければならない」と考える必要はありません。)

何か足りないのでしょうか、それとも VBScript がここでやりたいことを実行できないのでしょうか?

4

2 に答える 2