Excel VBAの「EOF 関数」について解説します。
EOF 関数とは
Excel VBA の EOF 関数は、ファイルの終端(End Of File)に到達したかどうかを判断するための関数です。ランダムアクセスモードまたはシーケンシャル入力モードで開いたファイルの現在位置が終端に達している場合に True を返します。
この関数を使用することで、ファイルの読み取り処理が終わったかどうかを確認することができます。
EOF 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
EOF 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
EOF(filenumber)
引数
引数 | 説明 |
---|---|
filenumber | 【必須】Openステートメントで開かれたファイルに 割り当てられたファイル番号を指定します |
戻り値
戻り値 | 説明 |
---|---|
ブール値 (Boolean) | EOF関数はブール値(True または False)を返します True : ファイルの終端に達した場合 False : ファイルの終端に達していない場合 |
解説(使用例)
EOF 関数の使い方をサンプルで確認しましょう。
EOF 関数サンプル
EOF 関数の基本的な使い方の例です。
テキスト形式のファイル終端を確認する例
次の例は、テキスト形式のファイル内容を読み取り、EOF 関数を使用してファイルの終端に達するまで処理を続ける基本的な方法です。
'■EOF関数使用例1(基本的な使用例)
Sub EOF_Sample()
Dim filePath As String
Dim strLine As String
Dim n As Long
' ファイルのパスを指定
filePath = "C:\VBA_test\bas\Module1.bas"
' ファイルを開く(ファイル番号をナンバー記号「#」付きで指定)
Open filePath For Input As #1
' ファイルの終端に達する(Trueになる)までループ
Do While Not EOF(1)
Line Input #1, strLine
n = n + 1 ' 行数をカウントする
Debug.Print strLine ' 書込内容をイミディエイトに表示
Loop
' ファイルを閉じる
Close #1 'fileNumber
MsgBox filePath & vbCrLf & _
"の行数は「" & n & "行」でした"
End Sub
イミディエイト画像は省略します。最後の MsgBox 画像指定がこちらです。
【コードの補足説明】
・8行目、ファイルのパスを変数に格納します。
・10行目、Openステートメントで指定パスのファイルを Input モードでファイル番号 #1 で開きます。
・13行目、Do While Not … Loop を使用して、EOF(1) が True を返すまで(ファイルの終端に達するまで)処理を継続していきます。
・15行目、Line Input #1, strLine を使用してファイルの1行を読み取り、strLine 変数に格納します。
・16行目、ファイルのテキスト行数をカウントするように設定しています。
・17行目、読み取ったテキストの内容をDebug.Printでイミディエイトウィンドウに表示します。
・21行目、処理が完了しので、Closeステートメントでファイルを閉じます。
・22行目、メッセージボックスでファイル内のテキスト行数を表示します。
【注意点】
・対象のファイルが正しく開かれていない場合、エラーが発生します。
・ファイル番号はFreeFile関数を使用して取得すれば空いている番号を自動取得できます。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA の EOF 関数は、ファイルの読み取り処理の際にファイルの終端に到達したかどうかを判断するための関数です。この関数を使用することで、ファイルの読み取り処理が終わったかどうかを確認することができます。
EOF 関数を使用することで、ファイル終端を簡単に確認できるので、ファイルの読み取り処理を安全かつ効率的に行うことができます。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;