VB6配列を作成する

スポンサーリンク

VB6 は、お世辞にも配列の扱いがうまいとは言えません。とりあえず、以下のソースを見てみましょう。

サンプルコード

以下にサンプルコードを示します。

VB6.0 以前
' 各種の配列を宣言する (配列の長さは未定義の状態、Nothing ではない)
Dim btArray() As Byte
Dim iArray()  As Integer
Dim lArray()  As Long

' 配列を生成する (ここでの配列の長さは 10 で既定の初期値が格納される)
Dim fArray(9) As Single
Dim dArray(9) As Double

' 値を格納して初期化する
fArray(0) = 1.1!
fArray(1) = 1.2!
dArray(0) = 2.1
dArray(1) = 2.2

このように、宣言と同時に初期値を決めることができません。これに関していえば、宣言の直後に初期化することで回避はできます。

最も重要な問題は、配列に Nothing という概念がないことです。宣言時は、長さが未定義という状態であり、Nothing ではありません。しかし、UBound 関数や LBound 関数で未定義の状態であることは読み取れません。(実行時エラーになる)

これらの具体的な回避策は、以下のような泥臭い手法によって可能です。

VB6.0 以前
' 長さ 0 の Byte 型の配列を作成する
Dim btArray() As Byte
btArray = vbNullString

' 長さ 0 の String 型の配列を作成する
Dim stArray() As String
stArray() = Split(vbNullString, vbNullChar)

' 長さ 0 の Object 型の配列を作成する
Dim oArray() As Object

' 長さ 0 の Variant 型の配列を作成する
Dim vArray() As Variant
vArray() = Array()

上記のような場合、LBound 関数の結果は 0、UBound 関数の結果は -1 となります。厳密には長さ 0 の状態とは言えないかもしれません。

これら以外のユーザー定義型については、SafeArrayAllocDescriptor という API 関数を使用します。これについては、検索して調べてみてください。

関連するリファレンス

準備中です。

スポンサーリンク