Excel ワークシートから、VBScript をスクリプト言語として使用するアプリケーション (Quick Test Professional) で使用される配列にデータを抽出する必要があります。そのために次のコードを使用できます。
' ws must be an object of type Worksheet
Public Function GetArrayFromWorksheet(byref ws)
GetArrayFromWorksheet = ws.UsedRange.Value
End Function
myArray = GetArrayFromWorksheet(myWorksheet)
MsgBox "The value of cell C2 = " & myArray(2, 3)
すべて問題ありませんが、返される配列には、リテラル テキスト文字列だけでなく、date、integer、double などの型のプリミティブも含まれています。そのデータが変換されることは何度もありました。
[編集]例:セルに入力=NOW()
し、セルの書式設定を17:45 に設定するhh:mm
と、表示される値が17:45になり、上記のメソッドは型の変数と 41194.7400990741 のようdouble
な値を返します
次の解決策はうまく機能しました。.Text
プロパティを使用してセルからリテラル テキストを取得できますが、それらは 1 つのセルでのみ機能し、セルの範囲では機能しません。プロパティの場合とは異なり、配列に対して一度にこれを行うことはできないため、一度に.Value
1 つのセルを配列に入力する必要があります。
Public Function GetArrayFromWorksheet_2(byref ws)
Dim range, myArr(), row, col
Set range = ws.UsedRange
' build a new array with the row / column count as upperbound
ReDim myArr(range.rows.count, range.columns.count)
For row = 1 to range.rows.count
For col = 1 to range.columns.count
myArr(row, col) = range.cells(row, col).text
Next
Next
GetArrayFromWorksheet_2 = myArr
End Function
しかし、ああ...ネストされたfor loop
. はい、大きなワークシートでは、顕著なパフォーマンスの低下が見られます。
誰かがこれを行うためのより良い方法を知っていますか?