Baccho Log

No Image

Sponsored Link

VBA テキストファイルの操作

  • 投稿日:
  • 更新日:
Tags:
Excel VBA
Categories:
プログラミング

VBAでテキストファイルを操作しよう!

Openステートメント

Open FileName For Mode [Lock] As #FileNumber [Len]

– FileName
開きたいファイル名を指定します(絶対パスで入力すること)

  • Mode
    1. Input
      読み込み(読み取り専用)
    2. Output
      書き込み(上書き)
    3. Append
      書き込み(追記)
    4. Random
      ランダムアクセス
    5. Binary
      バイナリ
  • Lock
    ファイルのアクセス制御

    1. Shared
      他プロセスからの読み書き可
    2. Lock Read
      他プロセスからの読み込み不可
    3. Lock Write
      他プロセスからの書き込み不可
    4. Lock Read Write
      他プロセスからの読み書き不可
  • 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
« VBA 配列についてCentOS 7 + Vagrant + VirtualBox でローカル開発環境を作る »

Sponsored Link

コメントする

記事の感想や修正依頼等ありましたら、コメントをお願いいたします