配列

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

Apache OpenOffice Basic では、単純型変数 (スカラー) の他に、配列 (データフィールド) もサポートしています。1 つのデータフィールド内には複数の値を格納することが可能で、これらの各要素に対してはインデックス指定によりアクセスします。

1 次元配列

配列の宣言法は、通常の変数と基本的には同じです。ただし、配列名に続けて、配列の要素数をかっこで囲んで指定する点が異なります。配列は次のようにして宣言します。

Dim MyArray(3)

この場合の配列は、MyArray(0)MyArray(1)MyArray(2)MyArray(3) という 4 つの要素を持つ、バリアント型変数として宣言されます。

また配列を宣言する際には、特定の変数型を指定することも可能です。たとえば次の例では 4 つの整数変数をとるよう配列を宣言しています。

Dim MyInteger(3) As Integer

これまでに説明した配列宣言の例では、インデックスの開始値として、標準値である 0 が使われています。このようなインデックスの開始および終了値は、配列 (データフィールド) の宣言時に指定することができます。次の例は 6 つの整数値を取るデータフィールドを作成するものですが、宣言をする際にインデックス範囲を 5 から 10 とするよう指定しています。

Dim MyInteger(5 To 10)

インデックス値には、正の値以外を使うことも可能です。次の例では、インデックス範囲に負の値を指定していますが、これも有効な宣言として処理されます。

Dim MyInteger(-10 To -5)

この場合、データフィールド (配列) のインデックス値は -10 から -5 までの整数値を取り、合計 6 つの要素を持つことになります。

データフィールド (配列) のインデックスについては、次の 3 つの制限があります。

  • インデックスとして使用可能な最小値は -32768 まで。
  • インデックスとして使用可能な最大値は 32767 まで。
  • 要素数 (データフィールドの次元) の最大値は 16368 まで。
Documentation note.png VBA のデータフィールドでは、これ以外の制限が課されている場合もあります。次元ごとに取りうる最大の要素数についても、同様の制限が当てはまります。実際に有効とされる値については、VBA の関連マニュアルを参照してください。

インデックスの開始値に関する設定

通常、データフィールド (配列) のインデックスには、0 から始まる値が割り当てられます。この開始値については、次のように指定することにより、すべてのデータフィールド宣言において 1 とするよう変更できます。

Option Base 1

この変更をモジュール内のすべての配列宣言に対して適用させるには、モジュールのヘッダ部で指定する必要があります。ただしこの変更は、Apache OpenOffice API で指定する UNO シーケンスに対しては無効で、これらのインデックスは常に 0 から始められます。このため Option Base 1 を指定すると、インデックスの開始値が混在する危険性があります。

Option Base 1 による設定は、インデックスの開始値を変更するだけであり、配列の要素数には影響しません。たとえば、次のサンプルコードのように配列を宣言したとします。

Option Base 1
' ...
Dim MyInteger(3)

この場合、MyInteger(1)MyInteger(2)MyInteger(3)MyInteger(4) という 4 つの要素を持つ配列が作成されます。

Documentation note.png VBA の場合とは異なり、Apache OpenOffice Basic での Option Base 1 による設定は、配列の要素数には影響しません。Apache OpenOffice Basic の場合、この設定は単にインデックスの開始値を変更するだけです。たとえば MyInteger(3) と宣言すると、VBA では 1 から 3 のインデックス値を取る 3 つの要素が確保されますが、Apache OpenOffice Basic では 1 から 4 のインデックス値を取る 4 つの要素が確保されます。Option Compatible を使用すると、Apache OpenOffice Basic は、VBA と同様に動作します。

多次元データフィールド

Apache OpenOffice Basic では 1 次元データフィールド (配列) の他に、多次元データフィールドもサポートしています。個々の次元の指定は、コンマ記号で区切ります。次のサンプルコードは、これらの使用例です。

Dim MyIntArray(5, 5)

ここでは 2 次元の配列を作成し、個々の次元に 6 つの要素 (インデックス値の 0 から 5) を確保しています。この配列全体としては 6 × 6 = 36 個の値を格納することができます。

Apache OpenOffice Basic では、数百次元にも及ぶ多次元配列を宣言することも可能ですが、実際には使用可能なメモリ量により、次元数に制限が課されることになります。

データフィールドのサイズの動的変更

これまでに説明した例では、特定のサイズを持つデータフィールド (配列) を扱ってきました。このような配列以外にも、データフィールドのサイズを動的に変更させることが可能です。たとえば、A という文字で開始するテキストで、すべての単語を含む配列を定義することができます。これらの単語の数は最初はわからないため、後でフィールドの上限を変更する必要があります。このような配列を作成するには、Apache OpenOffice Basic では次のように宣言します。

ReDim MyArray(10)
Documentation note.png VBA の場合は Dim MyArray() による動的配列のサイズ変更のみが行えますが、Apache OpenOffice Basic の場合は ReDim により動的および静的配列のサイズを変更できます。

次のサンプルコードでは、最初に作成した配列のサイズを何度か変更して、それぞれ 11 個および 21 個の値を格納できるようにします。

Dim MyArray(4) As Integer ' Declaration with five elements 
' ...
ReDim MyArray(10) As Integer ' Increase to 11 elements
' ... 
ReDim MyArray(20) As Integer ' Increase to 21 elements

配列のサイズを変更する際には、これまでの節で説明したすべてのオプションを指定できます。これには、多次元データフィールド化するための指定や、インデックスの開始および終了値の指定などが該当します。なお、データフィールドのサイズを変更すると、格納していたすべてのデータが消失されます。変更前の値を保持させるには、Preserve コマンドを使用します。

Dim MyArray(10) As Integer ' Defining the initial 
' dimensions
' ... 
ReDim Preserve MyArray(20) As Integer ' Increase in 
' data field, while
' retaining content

Preserve コマンドを使用する場合は、配列の次元数および変数型が、サイズ変更の前後で同じになっている必要があります。

Documentation note.png VBA で Preserve コマンドを使用すると、データフィールドの最終次元の上限値だけしか変更できませんが、Apache OpenOffice Basic では他の次元も変更できます。

ReDimPreserve を併用する場合、データフィールドのデータ型はオリジナルのものから変更することはできません。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools