VBAのPutでファイルにバイナリデータを書き込む方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Putの概要

ファイル操作 VBAの予約語

Put

概要 Put ステートメントは、VBAでファイルにバイナリデータや数値、文字列を保存するために使用されます。主に Open ステートメントと組み合わせて使用し、バイナリファイルや固定長データの書き込み に適しています。

わかりやすく説明 Put は、「指定した位置にデータを書き込んでね!」という命令です。テキストではなく、数値やバイナリデータを直接保存するのに使われます。

  • バイナリデータや固定長データをファイルに書き込む。
  • Open ステートメントと組み合わせて使用する。
  • ファイル内の指定した位置にデータを保存できる。
  • Get ステートメントと対になっており、データの読み取りに使用される。

Put の基本的な使い方(数値の保存)

Put を使って、数値データをバイナリファイルに保存する基本的な例です。

Sub SaveNumber()
    Dim fileNum As Integer
    Dim myNumber As Integer
    myNumber = 12345
    
    fileNum = FreeFile ' 使用可能なファイル番号を取得
    Open "C:\Temp\test.dat" For Binary As #fileNum
    Put #fileNum, , myNumber ' 数値を書き込み
    Close #fileNum ' ファイルを閉じる
End Sub

解説:

  • Open ... For Binary でバイナリファイルを開く。
  • Put #fileNum, , myNumber でファイルに整数データを書き込む。
  • Close #fileNum でファイルを閉じる。

Put を使ってレコード(固定長データ)を保存

Put を使って、ユーザー情報(レコード)をバイナリファイルに書き込む例です。

Type UserData
    ID As Integer
    Name As String * 20 ' 20文字の固定長
    Age As Integer
End Type

Sub SaveUserData()
    Dim fileNum As Integer
    Dim user As UserData
    
    user.ID = 1
    user.Name = "Taro Yamada"
    user.Age = 30
    
    fileNum = FreeFile
    Open "C:\Temp\users.dat" For Random As #fileNum Len = Len(user)
    Put #fileNum, 1, user ' 1レコード目に書き込む
    Close #fileNum
End Sub

解説:

  • Type を使って、固定長のレコードを定義。
  • Open ... For Random でファイルを開き、レコード単位でアクセス可能にする。
  • Put #fileNum, 1, user で 1 番目のレコードにデータを書き込む。

ExcelでのPutの活用例(セルのデータを保存)

Excelのセルデータをバイナリファイルに保存する例です。

Sub SaveCellData()
    Dim fileNum As Integer
    Dim cellValue As String
    
    cellValue = Range("A1").Value
    
    fileNum = FreeFile
    Open "C:\Temp\cell_data.dat" For Binary As #fileNum
    Put #fileNum, , cellValue
    Close #fileNum
End Sub

解説:

  • セルA1のデータを取得し、バイナリファイルに保存。
  • テキストファイルではなく、バイナリ形式で書き込む。

Get と組み合わせてデータを読み込む

Put で書き込んだデータは、Get を使って読み取ることができます。

Sub LoadNumber()
    Dim fileNum As Integer
    Dim myNumber As Integer
    
    fileNum = FreeFile
    Open "C:\Temp\test.dat" For Binary As #fileNum
    Get #fileNum, , myNumber ' データを読み込み
    Close #fileNum
    
    MsgBox "読み込んだ数値: " & myNumber, vbInformation, "Getの例"
End Sub

解説:

  • Get #fileNum, , myNumber を使って、Put で保存したデータを読み込む。
  • バイナリデータを正しく取り出すことができる。

エラーを回避する方法

Put を使う際に、ファイルが開けない場合のエラーハンドリングを追加します。

Sub SafeFileWrite()
    Dim fileNum As Integer
    Dim myData As String
    myData = "エラーチェック付きデータ"
    
    On Error Resume Next
    fileNum = FreeFile
    Open "C:\Temp\safe_output.dat" For Binary As #fileNum
    If Err.Number <> 0 Then
        MsgBox "ファイルを開けませんでした: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
        Exit Sub
    End If
    
    Put #fileNum, , myData
    Close #fileNum
End Sub

解説:

  • ファイルを開く際にエラーが発生した場合、エラーメッセージを表示。
  • エラーがなければデータを書き込んでファイルを閉じる。

Putの注意事項

  • Put はバイナリや固定長データの書き込みに適している: テキストデータを扱う場合は Print #Write # を使用する方が便利。
  • ファイルの書き込み位置を指定できる: Put #fileNum, 1, data のようにレコード単位でアクセス可能。
  • 型に注意: データ型が異なると、読み取り時に正しく取得できない可能性がある。

よくある質問

Q: Put でテキストを保存できますか?
A: はい。ただし、テキストファイルとして扱う場合は Print #Write # を使う方が簡単です。
Q: Get との違いは?
A: Put はデータを書き込む命令で、Get はデータを読み取る命令です。
Q: ファイルの途中にデータを書き込めますか?
A: はい。Put #fileNum, 位置, データ で指定した位置にデータを書き込めます。
Q: バイナリデータのサイズは決まっていますか?
A: データ型によってサイズが異なります。Len() を使うとサイズを確認できます。

まとめ

  • Put はバイナリデータや固定長データをファイルに書き込む。
  • 数値や文字列、レコードなどのデータを保存可能。
  • ファイルの特定の位置にデータを書き込める。
  • Get と組み合わせることでデータの保存・取得が可能。