CSVファイルやJSON形式のファイルなど、テキストファイルを操作(読み書き)したいときって結構ありませんか?システムからエクスポートしてExcelに読み込ませたり、Excelで管理しているデータをインポートするためにテキストファイルにしたりなど、テキストファイルを扱うケースは多いと思います。そのようなテキストファイルの操作方法(読み書き)について説明していきます。
Openステートメント
テキストファイルを開くにはOpenステートメントを使用します。Openステートメントは主にテキストファイルやバイナリファイルを開くために使用されるステートメントです。
構文
Open ファイルパス For モード As #ファイル番号
ファイルパス
テキストファイルのパスを指定します。
モード
モードには読み取り専用や書き込み専用など、どのモードでファイルを開くのかを指定します。
Input | 読み取り専用でファイルを開きます。 |
Output | 書き込み専用でファイルを開きます。既存のファイルがあれば上書きされます。 |
Append | 既存のファイルの末尾にデータを追加するためにファイルを開きます。 |
Binary | バイナリモードでファイルを開きます。 |
ファイル番号
ファイル番号には識別するための番号を指定します。通常は1から順に番号を割り当てます。数値を直接入力することもできます。
Open ファイルパス For モード As #1
ただし、使われている番号で別のファイルを開こうとするとエラーとなるため、通常はFreeFile関数を使用します。FreeFile関数を使えば、利用可能なファイル番号を返してくれるため安全に処理することができます。
Dim fn As Integer
fn = FreeFile
Open ファイルパス For モード As #fn
ファイル番号の前には必ず「#」を付けます。これはファイル番号を識別するための特別な接頭辞になるので忘れずに付けましょう。
Closeステートメント
Openステートメントでファイルを開いて処理が終わったら、Closeステートメントで忘れずにファイルを閉じます。
構文
Close #ファイル番号
ファイル番号
ファイルを開いたときのファイル番号を指定します。
読み取り専用
読み取りにはLine Inputステートメントを使用します。
Line Input #ファイル番号, データ
ファイル終端まで読み込む処理は以下のようになります。
Public Sub OpenFile()
Dim fn As Integer
Dim fp As String
Dim buf As String
' ファイル番号取得
fn = FreeFile
' ファイルオープン
fp = "ファイル"
Open fp For Input As #fn
' ヘッダー行読込
Line Input #fn, buf
' ファイル終端まで読込
Do Until EOF(fn)
Line Input #fn, buf
Debug.Print buf
Loop
' ファイルクローズ
Close #fn
End Sub
書き込み専用
書き込みにはPrintステートメントもしくはWriteステートメントを使用します。Writeステートメントは型情報を書き込む(日付の場合は「#2023/06/01#」といった文字列で書き込まれます)ので、そのままの値を書き込む場合はPrintステートメントを使用します。
Print #ファイル番号, データ
ファイルに書き込む処理は以下のようになります。
Public Sub OpenFile()
Dim fn As Integer
Dim fp As String
' ファイル番号取得
fn = FreeFile
' ファイルオープン
fp = "ファイル"
Open fp For Input As #fn
' ヘッダー行読込
Print #fn, "2023/06/01"; ' 改行しない場合は「;(セミコロン)」を付ける
Print #fn, "," & "12:00:00" ' 改行する場合は不要
' ファイルクローズ
Close #fn
End Sub
コメント