
Sponsored Link
VBA テキストファイルの操作
VBAでテキストファイルを操作しよう!
Openステートメント
Open FileName For Mode [Lock] As #FileNumber [Len]
– FileName
開きたいファイル名を指定します(絶対パスで入力すること)
- Mode
- Input
読み込み(読み取り専用) - Output
書き込み(上書き) - Append
書き込み(追記) - Random
ランダムアクセス - Binary
バイナリ
- Input
- Lock
ファイルのアクセス制御- Shared
他プロセスからの読み書き可 - Lock Read
他プロセスからの読み込み不可 - Lock Write
他プロセスからの書き込み不可 - Lock Read Write
他プロセスからの読み書き不可
- Shared
- FileNumber
1~511の任意の数字 -
Len
Randomモードの場合はレコード長
Randomモードでない場合はバッファ容量
32,767バイト以下の数値
Closeステートメント
Close [#FileNumber]
FileNumberで指定した番号のファイルを閉じる
カンマ区切りで複数指定が可能。
FileNumberを省略した場合は、全てのファイルを閉じる。
▼参考
http://officetanaka.net/excel/vba/file/file08b.htm
http://note.phyllo.net/?eid=1106165
Line Inputステートメント
Line Input #FileNumber, varname
FileNumberで指定した番号のファイルの1行を
varnameで指定した変数に割り当てます。
FreeFile関数
FreeFile[(num)]
numには0か1を指定します。
省略した場合は、0が指定されます。
0は1~255の範囲の番号を返します。
1は256~511の範囲の番号を返します。
これを使用することで、ファイル番号の重複を避けることが出来ます。
※使い方※
Openステートメントで指定している#FileNumberが重複してしまうとエラーとなります。
FreeFile関数は、使用可能な番号を取得します。
※注意※
数字をOpenステートメント等で#FileNumberを割り当てる前に再度FreeFile関数を宣言すると、同じ数字を返します。
Sub example() Dim buf As String Dim n As Integer, m As Integer n = FreeFile ' 1を返す m = FreeFile ' 割り当てる前なので、これも1を返す Open "C:\Users\update.txt" For Output As n ' ファイル番号1でupdate.txtを上書きモードで開く Open "C:\Users\test.txt" For Input As m ' ファイル番号1なのでtext.txtが開けない! ⇒ エラー! Do Until EOF(m) Line Input #m, buf Print #n, buf' Loop Close m Close n End Sub
Sub readText() Dim buf As String Dim n As Integer, m As Integer n = FreeFile ' 1を返す Open "C:\Users\update.txt" For Output As n ' ファイル番号1でupdate.txtを上書きモードで開く m = FreeFile ' Openステートメント宣言時に#FileNumberを渡しているため、2を返す Open "C:\Users\test.txt" For Input As m ' ファイル番号2でupdate.txtを上書きモードで開く Do Until EOF(m) ' ファイル末尾までループを回す Line Input #m, buf ' text.txtの現在読み込んでる1行をbufの中に割り当てる Print #n, buf' text.txtの内容をupdate.txtに上書きする Loop Close m ' text.txtを閉じる Close n ' update.txtを閉じる End Sub
Printステートメント
Print #FileNmber, OutputList
ファイルを書き込む際に使用します。
Writeステートメント
Write #FileNmber, OutputList
ファイルを書き込む際に使用します。
EOF関数
EOF(FileNumber)
FileNumberで指定した番号のファイルが末尾である場合、Trueを返します。
それ以外はFalseを返します。
Sub readText() Dim buf As String Open "C:\Users\test.txt" For Input As #1' text.txtを読み取り専用で読み込み、text.txtのファイル番号を1とする。 Do Until EOF(1)' ファイル末尾までループを回す Line Input #1, buf' text.txtの現在読み込んでる1行をbufの中に割り当てる Debug.Print buf Loop Close #1' text.txtを閉じる End Sub