Excel VBAの「FreeFile 関数」について解説します。
FreeFile 関数とは
Excel VBA の FreeFile 関数は、Open ステートメントで使用できる次のファイル番号 (Integer) を返します。
Open ステートメントでファイル操作(読み込み、書き込み、追加など)を行う際には、使われていないファイル番号が必要です。FreeFile 関数を使用すれば、使用されていないファイル番号を自動的に取得できます。
FreeFile 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
FreeFile 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
FreeFile[(rangenumber)]
引数
引数 | 説明 |
---|---|
rangenumber (Variant) | 【省略可能】0 または 1 で番号の範囲を指定します ※ 省略時の既定値は 0 です 0 指定の範囲は 1 から 255 です 1 指定の範囲は 256 から 511 です |
戻り値
戻り値 | 説明 |
---|---|
空きファイル番号 (Integer) | 引数 rangenumber で指定した範囲から 使用されていないファイル番号を返します ※ 空き番号の最小値が返ります |
解説(使用例)
FreeFile 関数の使い方について、サンプルを使って解説します。
FreeFile 関数サンプル
FreeFile 関数の基本的な使い方をサンプルで確認します。
ファイルを開いて書き込む例
FreeFile 関数を使用してテキストファイルにデータを書き込む例です。
'■FreeFile関数使用例1(基本的な使用例)
Sub FreeFile_Sample01()
Dim fileNo As Integer
Dim filePath As String
filePath = "C:\VBA_test\example.txt"
' 使用可能なファイル番号を取得
fileNo = FreeFile
' ファイルを開く
Open filePath For Output As #fileNo
' 開いたファイルにデータを書き込む
Print #fileNo, "Used fileNo : " & fileNo
' ファイルを閉じる
Close #fileNo
End Sub
FreeFile 関数で取得した空きファイル番号を使用してファイルを開き、「Used fileNo : fileNo」というテキストを書き込んでいます。書き込まれたファイルを確認した画像が次のとおりです。

FreeFile 関数を使わずに手動でファイル番号を指定してファイルを開く場合、その番号がすでに使われていたときには、次のようなエラーが発生します。

FreeFile 関数を使用していればこのエラーは発生しないということです。
FreeFile 関数の動作確認テスト
ファイルに追加で書き込む例を使って、FreeFile 関数が空きファイル番号を取得する動作の確認をしてみます。
'■FreeFile関数使用例2(FreeFile動作テスト)
Sub FreeFile_Sample02()
Dim fileNo As Integer
Dim filePath As String
Dim i As Integer
filePath = "C:\VBA_test\example"
' ファイル番号は手動指定で開きます(追加モード)
Open filePath & ".txt" For Append As #256
' 開いたファイルに追加でデータを書き込む
Print #256, "Used fileNo : " & 256
' ここから FreeFile の動作確認
For i = 1 To 3 ' 3個のファイルを追加します
' 使用可能なファイル番号を取得
fileNo = FreeFile(1)
' ファイルを開く
Open filePath & i & ".txt" For Append As #fileNo
' 最初に開いたファイルに追加でデータを書き込む
Print #256, "Used fileNo : " & fileNo
' 開いているファイルはここでは閉じません
Next
' 開いているファイルを全て閉じる
For i = 256 To 259
Close #i
Next
End Sub
このコードを実行して書き込まれたファイルのデータを確認した画像が次のとおりです。

使用したファイル番号が重複せず取得できていることが確認できます。
【コードの補足説明】
・8行目、Open ステートメントで指定ファイル番号(#256)を使い、追加モード(Append) で開きています。
・10行目、開いたファイルにテキスト「Used fileNo : 256」を書き込んでいます。
・14行目、FreeFile 関数は、ほとんどの場合で引数を省略して使いますが、ここでは引数に (1) を設定して 256 以降の空き番号を取得させています。
・16行目、ファイル名(i).txt を開いていますが、書き込みも閉もしませずそのままにしています。
・18行目、一番最初に開いたファイルに追加で開いたファイルの情報を書き込んでいます。
・20行目、次のファイルの処理へ進めます。
・22~24行目、開いているファイル番号のファイルをすべて閉じています。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA の FreeFile 関数は、VBAでファイル操作を行う際に非常に便利な関数です。使用可能なファイル番号を自動的に取得してくれるので、ファイル操作を簡単に行うことができます。エラーを起こすリスクを回避できるので、是非活用してみてください。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;