Get ステートメント

開いているディスク ファイルから変数にデータを読み込みます。

構文

Get [ # ] filenumber, [ recnumber ], varname


Get ステートメントの構文には、次の指定項目があります。

指定項目 説明
filenumber 必須。 任意の有効なファイル番号です。
recnumber 省略可能。 長整数型 (Long) のバリアント型 (Variant)。 読み取りが開始される場所のレコード番号 (Random モード ファイル) またはバイト番号 (Binary モード ファイル) です。
varname 必ず指定します。 データの読み込み先となる有効な変数名です。

注釈

Get で読み取 ったデータ は、通常、Put を使用してファイルに 書き込まれます。 ファイルの最初のレコードまたはバイトは位置 1 になり、2 番目のレコードまたはバイトは位置 2 になります。これ以降も同様です。 recnumber を省略すると、最後の Get ステートメントまたは Put ステートメントの後の次のレコードまたはバイト (または最後の Seek 関数が指す) が読み取されます。 区切り記号のコンマを含める必要があります。次に例を示します。

Get #4,,FileBuffer 

Random モードで開いたファイルには、次のルールが適用されます。

  • 読み取るデータの長さが Open ステートメントの Len 句で指定された長さより短い場合 、Get はレコードの長さの境界で後続のレコードを読み取ります。 1 つのレコードの末尾と次のレコードの先頭の間の領域には、ファイル バッファの既存のコンテンツが埋め込まれます。 埋め込みデータの量を確実に決定することはできないので、一般に、レコード長を、読み取られるデータの長さに一致させることをお勧めします。

  • 読み込まれる変数が可変長の文字列の場合、Get により、文字列の長さが含まれる 2 バイトの記述子が読み取られた後に、変数に入れられるデータが読み取られます。 したがって、Open ステートメントの Len 句に指定するレコード長には、文字列の実際の長さよりも 2 バイト以上長い値を指定する必要があります。

  • 読み込む変数が数値型の バリアント型である場合、Get はバリアント型 (Variant)VarType を識別する 2 バイトを読み取り、変数に入るデータを読み取ります。 たとえば 、VarType 3 の バリアント 型を読み取る場合 、Get は 6バイトを読み取ります。バリアント型を VarType 3 (Long) として識別する 2 バイトと、Long データを含む 4 バイトを読み取ります。 Open ステートメントの Len 句で指定するレコード長は、変数を格納するために必要な実際のバイト数よりも 2 バイト以上長い値にする必要があります。

    注意

    Get ステートメントを使用 してディスク から Variant配列を読み取り、Getを使用して配列を含むスカラー バリアントを 読み取りすることはできません。 また、 Get を使用して、オブジェクトをディスクから読み取ることもできません。

  • 読み込まれる変数が、VarType 8 (文字列型 (String)) のバリアント型 (Variant) である場合、Get により、VarType を識別する 2 バイトおよび文字列の長さを示す 2 バイトが読み取られた後に、文字列データが読み取られます。 Open ステートメントの Len 句に指定するレコード長には、文字列の実際の長さよりも 4 バイト以上長い値を指定する必要があります。

  • 読み込まれる変数が動的配列の場合、Get により、次元数の 8 倍に 2 を加えた値 (つまり、2 + 8 * NumberOfDimensions) の長さの記述子が読み取られます。 Open ステートメントの Len 句に指定するレコード長には、配列データと配列記述子を読み取るために必要なすべてのバイト数の合計以上の値を指定する必要があります。 たとえば、以下の配列宣言では、配列をディスクに書き込む場合に 118 バイト必要です。

      Dim MyArray(1 To 5,1 To 10) As Integer 
    

    118 バイトは、記述子 ( ) の場合は 18 バイト、データ ( ) の 2 + 8 * 2 場合は 100 バイトです 5 * 10 * 2

  • 読み込まれる変数が固定サイズの配列の場合、Get によりデータのみが読み取られます。 記述子は読み取られません。

  • 読み込まれる変数がその他の種類の変数 (可変長の文字列またはバリアント型 (Variant) ではない) の場合、Get により変数のデータのみが読み取られます。 Open ステートメントの Len 句に指定するレコード長には、読み取られるデータの長さ以上の値を指定する必要があります。

  • Get は、 要素間に 埋め込みがない場合を除き、それぞれ個別に読み取りを行っている場合と同様に、ユーザー定義型の要素を読み取ります。 ディスク上では、ユーザー定義型 (Put で記述) の動的配列の先頭には、長さが次元の 2 倍と 8 倍 、つまり 2 + 8 * NumberOfDimensions の記述子が付け加えされます。 Open ステートメントの Len 句で指定するレコードの長さは、配列とその記述子を含む個々の要素の読み取りに必要なすべてのバイトの合計以上である必要があります。

Binary モードで開いたファイルには、Random のすべてのルールが適用されますが、次に示す例外があります。

  • Open ステートメントの Len 句の影響はありません。 Get は ディスクからすべての変数を連続して読み取ります。つまり、レコード間の埋め込みはありません。

  • ユーザー定義型内の配列以外の配列では、Get によりデータのみが読み取られます。 記述子は読み取られません。

  • Get により、ユーザー定義型の要素ではない可変長の文字列が、2 バイト長の記述子を想定せずに読み取られます。 読み取られるバイト数は、文字列に既に含まれている文字の数と等しいものです。 たとえば、以下のステートメントでは、10 バイトがファイル番号 1 から読み取られます。

      VarString = String(10," ") 
      Get #1,,VarString 
    
    

この例では、Get ステートメントを使用して、ファイルから変数にデータを読み込みます。 この例では、 TESTFILE が、ユーザー定義型 Record の 5 つのレコードが含まれているファイルであることを前提としています。

Type Record ' Define user-defined type. 
 ID As Integer 
 Name As String * 20 
End Type 
 
Dim MyRecord As Record, Position ' Declare variables. 
' Open sample file for random access. 
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) 
' Read the sample file using the Get statement. 
Position = 3 ' Define record number. 
Get #1, Position, MyRecord ' Read third record. 
Close #1 ' Close file. 

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。