ファイル
■概要
ファイルの読み書きの流れは、基本的に他の言語と同様です。
ファイルを開き、開いている間に、読み込み、書き込みを行って、
最後にファイルを閉じます。
■開く
ファイルを開くためには「Openステートメント」を使用します。
●書式
・書式例
Open ファイル名(フルパス) For アクセスモード As ファイル番号
・具体例
Open "Test.txt" For Output As #fileno
ファイル名:
ファイル名は開く予定のファイルのファイル名を
ファイルパス込みで指定します。
パス無しで指定した場合は開いているxlsのフォルダの
ファイルパスが使われます。
アクセスモード:
アクセスモードはどのような形式でファイルを開くかということです。
アクセスモードの種類は以下の表の通りです。
Inputは読み込み専用、OutputとAppendは書き込み専用で、
Outputだと新規ファイルとして書き込みされますが、
Appendでは既存ファイルに追記という形で書き込まれます。
RandomはDBアクセスの際に使用するモードで、
Binaryはバイナリデータとして読み書きをする際に使用します。
ファイル番号:
VBAでは管理するファイル番号は自分で決めることができ、
それを開く際にVBAに伝えることで関連付けが行われます。
ですが、ファイル番号はユニークな番号でなければならないので、
「FreeFileステートメント」を使用してファイル番号を取得するのが基本です。
FreeFile:
現在使用可能なファイル番号を返してくれる
書式:
FreeFile
具体例:
Dim fileno As Integer
fileno = FreeFile
■読み込み
●EOF判定
ファイル読み込みの場合、EOF判定が不可欠です。
EOFを知るためには「EOF関数」を使用します。
boolean EOF(ファイル番号):
引数:
EOFかどうかを調べるためのファイル番号
戻り値:
true => EOF
false => EOFではない
内容:
ファイル番号のファイルの位置がEOFかどうかを調べる
●ファイル読み込み
ファイルの読み込みモードがInputで読み込まれたファイル情報の取得には
「Line Inputステートメント」を使用します。
Line Inputは読み込まれたファイルから1行単位で読み込んでくれます。
・書式
書式例:
Line Input ファイル番号, 読込先の文字列変数
具体例:
Line Input #fileno, str
●EOFまで繰り返し処理の例:
Dim count As Integer : count = 1
' EOFじゃなかったら処理を繰り返す
Do While Not EOF(fileno)
Dim str As String
Line Input #fileno, str
Cells(count, 1).Value = str
Loop
■書き込み
Outputモードで開かれたファイルへの書き込みには
「Printステートメント」を使用します。
Printステートメントは指定されたファイルに対してデータを書き込みます。
書き込まれたデータには改行コードが自動的に挿入されます。
●書式
・書式例
Print ファイル番号, 書き込むデータ
・具体例
Print #fineno, "テスト"
■ファイルを閉じる
ファイルを閉じる場合は「Closeステートメント」を使用します。
●書式
・書式
Close 閉じるファイル番号
・具体例
Close #fileno
もし、Closeの後ろにファイル番号の指定を行わなければ
開いてあるファイルが全て閉じます。
■サンプルコード(書き込み)
Sub FileWrite()
Dim fileno As Integer
fileno = FreeFile
Open "Test.txt" For Output As #fileno
Print #fileno, "テスト"
Close #fileno
End Sub
実行結果:
xlsファイルを作ったフォルダにTest.txtが作成される
■サンプルコード(読み込み)
Sub FileRead()
Dim fileno As Integer
fileno = FreeFile
Open "Test.txt" For Input As #fileno
Dim count As Integer : count = 1
Do Until EOF(fileno)
Dim str As String
Line Input #fileno, str
Cells(count, 1).Value = str
count = count + 1
Loop
Close #fileno
End Sub
実行結果:
Test.txtを読み込んだ内容をセルに表示していく
■バイナリファイルへの書き込み
バイナリファイルへの書き込みはPrintではなく、「Putステートメント」を使用します。
それ以外はモード指定でBinaryにするだけで、動作可能です。
●書式
書式例:
Put ファイル番号, レコード位置(省略可), 書き出しの内容
具体例:
Put #fineno, , data
●コード
Private Type Param
m_Hp As Integer
m_Mp As Integer
m_At As Integer
m_Def As Integer
End Type
Sub FileWriteB()
Dim prm As Param
prm.m_Hp = 10
prm.m_Mp = 100
prm.m_At = 1000
prm.m_Def = 1000
Dim fileno As Integer
fileno = FreeFile
Open "Test.prm" For Binary As #fileno
Put #fileno, , prm
Close #fileno
End Sub
実行結果:
Test.prmにParamの情報が書き込まれる