FreeFile関数 EXCEL VBAリファレンス

VBAリファレンス

説明

機能

Openステートメントで使用するファイル番号の空き番号を整数型 (Integer)で返します。

構文

FreeFile[(rangenumber)]

オプションのrangenumberは通常指定しません。
指定する場合は、0か1が指定出来ます。
0を指定すると、1~255、1を指定すると、256~511の範囲の空いているファイル番号が返ります。

補足

Openステートメントを使ったファイル入出力は、アクセスするファイルにファイル番号を付けて処理を行います。
ファイル番号は、プログラマーが任意の整数(1~511)を採番してもよいですが、FreeFile関数を使用すると、その時点で空いているファイル番号が取得出来るので、ファイル番号の重複による障害の可能性を無くします。
従って、ファイル番号設定時は、必ず使うようにしたいものです。(たとえ取り扱うファイルがひとつでも)

使用例

EX01 空いてるファイル番号を取得する
EX02 空いてるファイル番号を取得する(rangenumberに0を指定)
EX03 空いてるファイル番号を取得する(rangenumberに1を指定)
EX04 FreeFile関数の具体的な使い方(ファイルを入力する)

EX01 空いてるファイル番号を取得する

コード

  Dim fileno As Integer
  fileno = FreeFile
  Debug.Print fileno 

実行結果

1

メモ

他に使用中のファイル番号がない場合は1が返ります。

EX02 空いてるファイル番号を取得する(rangenumberに0を指定)

コード

  Dim fileno As Integer
  fileno = FreeFile(0)
  Debug.Print fileno 

実行結果

1

メモ

EX01と同じ結果になります。

EX03 空いてるファイル番号を取得する(rangenumberに1を指定)

コード

  Dim fileno As Integer
  fileno = FreeFile(1)
  Debug.Print fileno 

実行結果

256

メモ

rangenumberに1を指定した場合で他に使用中のファイル番号がない場合は256が返ります。

EX04 FreeFile関数の具体的な使い方(ファイルを入力する)

コード

Dim fileno As Integer   ' ファイル番号
Dim buf As String       ' 入力データエリア

'ファイル番号の取得
fileno = FreeFile
 
'入力ファイルの処理
Open "c:\vbatest\test01.txt" For Input As #fileno
While Not EOF(fileno)
  Line Input #fileno, buf
  Debug.Print buf
Wend
Close #fileno

解説

5:空いているファイル番号を取得する。
8:取得したファイル番号でファイル「test01.txt」を入力モードでオープンする。
9:ファイル番号のファイルが読める間、10-11の処理を繰り返す。
10:ファイル番号のファイルから1行入力する。
13:ファイル番号のファイルを閉じる。

実行結果

test01.txtの内容

メモ

この例で取り扱いの出来るファイルは、Shift-JIS形式(改行コード:CRLF)のテキストファイルになります。

補足情報

ワンポイントアドバイス

FreeFile関数を使うべき理由

ファイル番号は任意の整数を設定するため、FreeFile関数を使わなくてもプログラミング出来ますが、保守性、拡張性の点から、ファイル番号はわかりやすい名前を付けた変数を定義し、FreeFile関数で設定して使うことをおすすめします。特に業務利用のコードを記述する場合は、必須と考えていいと思います。たとえ取り扱いするファイルがひとつでもです。

FreeFile関数を使わない例(値指定)
  Open "c:\vbatest\test01.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, buf
  Wend
  Close #1
FreeFile関数を使った例(変数指定)
  fileno = FreeFile
  Open "c:\vbatest\test01.txt" For Input As #fileno
  While Not EOF(fileno)
    Line Input #fileno, buf
  Wend
  Close #fileno

rangenumber=1を使う状況は?

私は、rangenumberパラメータを指定したプログラミングをしたことがありません。何に使うのだろう?と思っていたのですが、FreeFile関数を使わずにファイル番号を直接値指定したプログラムに、新たなファイル入出力のコードを追加する際に使えるかもしれないなあ、と思いました。
(大抵の場合、既存のプログラムは、ファイル番号の値を1から採番しており、rangenumber=1指定時のFreeFile関数の戻り値256~と衝突を防げるので)

類似機能

ADODB.Streamオブジェクトによるファイル入出力
FileSystemObjectオブジェクトによるファイル入出力

タイトルとURLをコピーしました