VBA関数
FileAttr関数

Excelマクロで必須のVBA関数を入門・初級・初心者向けに詳細解説
公開日:2013年5月以前 最終更新日:2025-06-15

FileAttr関数


FileAttr関数は、Open ステートメントで開かれたファイルのモードを取得するために使用されます。
これにより、ファイルがどのような方法(入力、出力、ランダム、バイナリなど)で開かれているかを確認できます。


FileAttr関数の構文

FileAttr(filenumber, returntype)

filenumber
必須
データ型: Integer
Open ステートメントでファイルを開くときに指定した有効なファイル番号です。
ファイル番号は1から255までの整数で、FreeFile 関数を使用して未使用のファイル番号を取得することが推奨されます。

returntype
必須
データ型: Long
取得する情報の種類を指定します。以下の定数または値を指定します。
  • 1 (または vbFileAttrNormal): ファイルのアクセスモード(既定値)。これが最も一般的に使われます。
  • 2 (または vbFileAttrDirectory): ファイルのオペレーティングシステムハンドル(VBAの通常の利用ではあまり使いません)。

解説・制限事項等
  • FileAttr 関数は、filenumber に指定されたファイルが現在どのようなモードで開かれているかを示す整数値を返します。
    returntype が 1 の場合、返される値は以下のいずれかの定数(またはその数値)です。
    これらの値は、ファイルがVBAによって開かれているアクセスモードを示します。

    定数 説明
    1 vbInput 入力モード (Input)
    2 vbOutput 出力モード (Output)
    4 vbRandom ランダムアクセスモード (Random)
    8 vbAppend 追加モード (Append)
    32 vbBinary バイナリモード (Binary)

  • returntype に 2 を指定した場合、戻り値はファイルまたはデバイスのオペレーティングシステムハンドルです。
    この値は、VBA内で直接利用することは少なく、より低レベルなAPI呼び出しなどで使われることがあります。
  • 指定された filenumber が開かれていない場合や無効な場合は、ランタイムエラーが発生します。

FileAttr関数の使用例

次のコード例では、FileAttr 関数を使って、開かれたファイルのモードを確認します。

Sub FileAttr_Sample()

  Dim fileNum As Integer
  Dim filePath As String
  Dim fileMode As Integer

  filePath = ThisWorkbook.Path & "\TestFile.txt" ' 同一フォルダにテストファイルを作成

  On Error GoTo ErrorHandler ' エラーハンドラを設定

  ' 例1: Inputモードでファイルを開き、モードを確認
  fileNum = FreeFile ' 空いているファイル番号を取得
  Open filePath For Output As #fileNum ' まずファイルを作成(既存なら上書き)
  Print #fileNum, "これはテストデータです。"
  Close #fileNum
  
  Open filePath For Input As #fileNum ' Inputモードで開く
  fileMode = FileAttr(fileNum, 1) ' ファイルのモードを取得
  MsgBox "Inputモードで開かれたファイルのモード: " & fileMode & " (" & GetFileModeName(fileMode) & ")", _
      vbInformation, "FileAttr 関数 例1"
  Close #fileNum ' ファイルを閉じる

  ' 例2: Appendモードでファイルを開き、モードを確認
  fileNum = FreeFile ' 空いているファイル番号を取得
  Open filePath For Append As #fileNum ' Appendモードで開く
  fileMode = FileAttr(fileNum, 1) ' ファイルのモードを取得
  MsgBox "Appendモードで開かれたファイルのモード: " & fileMode & " (" & GetFileModeName(fileMode) & ")", _
      vbInformation, "FileAttr 関数 例2"
  Close #fileNum ' ファイルを閉じる

  ' 例3: Binaryモードでファイルを開き、モードを確認
  fileNum = FreeFile ' 空いているファイル番号を取得
  Open filePath For Binary As #fileNum ' Binaryモードで開く
  fileMode = FileAttr(fileNum, 1) ' ファイルのモードを取得
  MsgBox "Binaryモードで開かれたファイルのモード: " & fileMode & " (" & GetFileModeName(fileMode) & ")", _
      vbInformation, "FileAttr 関数 例3"
  Close #fileNum ' ファイルを閉じる

  ' テストファイルを削除
  Kill filePath

  Exit Sub

ErrorHandler:
  MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
  If fileNum <> 0 Then Close #fileNum ' 開いているファイルがあれば閉じる
  If Dir(filePath) <> "" Then Kill filePath ' テストファイルが残っていたら削除
End Sub

' ファイルモードの数値を名前に変換するヘルパー関数
Private Function GetFileModeName(mode As Integer) As String
  Select Case mode
    Case 1
      GetFileModeName = "Input"
    Case 2
      GetFileModeName = "Output"
    Case 4
      GetFileModeName = "Random"
    Case 8
      GetFileModeName = "Append"
    Case 32
      GetFileModeName = "Binary"
    Case Else
      GetFileModeName = "不明なモード"
  End Select
End Function

  • このコードでは、まず ThisWorkbook.Path & "\TestFile.txt" でテストファイルへのパスを定義しています。
  • FreeFile 関数を使って、使用されていないファイル番号を取得しています。これは、ファイル操作を行う際に推奨される方法です。
  • 例1では、Outputモードでファイルを作成し、一旦閉じた後、Inputモードで再度開いています。その後、FileAttr(fileNum, 1) を使って、そのファイルのアクセスモードを取得し、GetFileModeName ヘルパー関数で分かりやすい名前に変換して表示しています。
  • 例2と例3も同様に、AppendモードとBinaryモードでファイルを開いた際の FileAttr 関数の戻り値を確認しています。
  • ErrorHandler は、ファイル操作中にエラーが発生した場合に、メッセージを表示し、開いているファイルを確実に閉じるためのエラー処理です。
  • 最後に Kill filePath で作成したテストファイルを削除しています。


※本記事の作成にあたっては、生成AI(Gemini)を活用し一部の文章作成を行っています。最終的な内容は人間による確認・編集を経て掲載しています。


Office VBA リファレンス FileAttr関数

※VBA関数一覧
マクロVBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他……



同じテーマ「VBA関数」の記事

CurDir関数
Dir関数
EOF関数
FileAttr関数
FileDateTime関数
FileLen関数
FreeFile関数
GetAttr関数
Input関数
Loc関数
LOF関数


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ