VBA:入出力関数(Open/Close)

目次

基本的なファイル操作の理解

VBAでのファイル操作の基礎となるOpenステートメントとCloseステートメントの使い方について学びましょう。

これらのステートメントは、ファイルを開いたり閉じたりする際に不可欠です。

Openステートメントはファイルを開くために、Closeステートメントはファイルを閉じるために使用されます。

これらのステートメントを適切に使用することで、VBAでのファイル処理が可能になります。

Open関数

ファイルを開いて、ファイルへの入出力ができるようにします。

Open “ファイルのパス” For アクセスモード As #ファイル番号

ファイルのパス必ず指定します。
文字列式にはファイル名を指定します。
フォルダ名、またはドライブ名も含めて指定できます。
アクセスモード必ず指定します。
ファイル モードを示す、次のいずれかのキーワードを指定します。
Append、Binary、Input、Output、または Random
省略すると、ファイルはランダム アクセス モードで開かれます。

Append:追加モード(既存データの後ろに追加される)
Binary:バイナリモード
Input:シーケンシャル入力モード(先頭から順に読み込みます)
Output:シーケンシャル出力モード(先頭から順に書き込みます)
Random:ランダムアクセスモード
Append、Binary、Output、または Random モードでファイルを開くと、そのファイルが作成されます。
ファイル番号必ず指定します。
1~511の範囲で任意のファイル番号を指定します。
扱うファイルが少ない場合は、この番号を固定数値で指定しても構いませんが、
FreeFile 関数を使用して次に使用可能なファイル番号を取得するようにした方がより安全です。
Open関数のパラメータの意味

なお、エクセルを開く場合は、Open関数を使うけど、上記の書式とは異なります。

エクセルを開く場合の詳細は、以下をご覧ください。

Close関数

Open ステートメントで開いたファイルへの入出力を終了して、ファイルを閉じます。

Close “ファイル番号”

FreeFile関数

使用可能なファイル番号を取得するために FreeFile関数を使用します。

FreeFile

Line Input関数

シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、文字列型 (String) の変数に代入するファイル入出力ステートメントです。

Line Input #ファイル番号, 変数(String型)

Print関数

シーケンシャル出力モード (Output または Append) で開いたファイルにデータを書き込むファイル入出力関数です。

Print #ファイル番号, 文字列等

サンプルコード

サンプルコード1: テキストファイルを開く

Sub OpenTextFile()
    Dim filePath As String
    Dim fileNumber As Integer

    filePath = "C:\example.txt"  ' ファイルパスを指定
    fileNumber = FreeFile()      ' 空いているファイル番号を取得

    ' ファイルを開く
    Open filePath For Input As #fileNumber

    ' ここでファイルを読み込んだり操作したりするコードを記述

    ' ファイルを閉じる
    Close #fileNumber
End Sub

このコードは、指定されたパスのテキストファイルを開き、ファイル番号を使用してファイルを操作します。

最後にファイルを閉じることを忘れないでください。

サンプルコード2: テキストファイルに書き込む

Sub WriteTextFile()
    Dim filePath As String
    Dim fileNumber As Integer

    filePath = "C:\example.txt"  ' ファイルパスを指定
    fileNumber = FreeFile()      ' 空いているファイル番号を取得

    ' ファイルを開く(書き込みモード)
    Open filePath For Output As #fileNumber

    ' ファイルにデータを書き込む
    Print #fileNumber, "これはテストです。"

    ' ファイルを閉じる
    Close #fileNumber
End Sub

このコードは、指定されたパスにテキストファイルを開き(存在しない場合は新規作成)、文字列を書き込みます。

ファイル操作が終了したら、ファイルを閉じることが重要です。

サンプルコード3: テキストファイルを開いて読み取る

Sub OpenReadFile()
    Dim filePath As String
    Dim fileContent As String
    Dim fileNumber As Integer

    filePath = "C:\example.txt" ' ファイルのパス
    fileNumber = FreeFile() ' 利用可能なファイル番号を取得

    ' テキストファイルを入力モードで開く
    Open filePath For Input As #fileNumber

    ' ファイルを行単位で読み込み
    Do Until EOF(fileNumber)
        Line Input #fileNumber, fileContent
        Debug.Print fileContent ' コンソールに出力
    Loop

    ' ファイルを閉じる
    Close #fileNumber
End Sub

サンプルコード1に対して、ファイルを開いた後の処理を追加してます。

サンプルコード4: バイナリファイルを読み込む

Sub OpenBinaryFile()
    Dim filePath As String
    Dim fileContent As String
    Dim fileNumber As Integer

    filePath = "C:\example.dat" ' ファイルのパス
    fileNumber = FreeFile()

    ' バイナリファイルをバイナリモードで開く
    Open filePath For Binary As #fileNumber

    ' ファイルを読み込む
    Get #fileNumber, , fileContent
    Debug.Print fileContent ' コンソールに出力

    ' ファイルを閉じる
    Close #fileNumber
End Sub

サンプルコード5: キストファイルを追記モードで開く

Sub OpenAppendFile()
    Dim filePath As String
    Dim fileNumber As Integer

    filePath = "C:\example.txt" ' ファイルのパス
    fileNumber = FreeFile()

    ' ファイルを追記モードで開く
    Open filePath For Append As #fileNumber

    ' ファイルにデータを追加する
    Print #fileNumber, "VBAは楽しい!"

    ' ファイルを閉じる
    Close #fileNumber
End Sub

サンプルコード6: 複数のデータをファイルに書き込む

Sub WriteMultipleDataToFile()
    Dim filePath As String
    Dim fileNumber As Integer
    Dim i As Integer

    filePath = "C:\numbers.txt" ' ファイルのパス
    fileNumber = FreeFile()

    ' ファイルを出力モードで開く
    Open filePath For Output As #fileNumber

    ' 1から10までの数をファイルに書き込む
    For i = 1 To 10
        Print #fileNumber, "Number: " & i
    Next i

    ' ファイルを閉じる
    Close #fileNumber
End Sub
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次