0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】GetAttr関数|ファイル属性を取得する方法と注意点

0
Last updated at Posted at 2025-08-10

この記事ではGetAttr関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。

GetAttr関数の使い方と注意点

GetAttr関数は、ファイルやフォルダの属性を数値として取得する関数です。
取得した属性はビットごとの組み合わせになっており、隠しファイルやフォルダなど特定の条件を判定する際に使います。

構文

GetAttr(パス)
  • パス : 属性を取得したいファイルまたはフォルダのパス
  • 戻り値 : 属性を表す整数(定数のビット和)

属性を表す定数

定数 説明
vbNormal 0 通常のファイル
vbReadOnly 1 読み取り専用
vbHidden 2 隠しファイルまたはフォルダ
vbSystem 4 システムファイルまたはフォルダ。Macintoshでは使用できません。
vbDirectory 16 フォルダ
vbArchive 32 アーカイブ属性。Macintoshでは使用できません。
vbAlias 64 エイリアスファイル。Macintoshでのみ使用できます。

使用例

ファイルの属性を確認する

Sub Sample()
    Dim path As String
    path = "C:\Temp\sample.txt"

    If Dir(path, vbHidden Or vbSystem) <> "" Then
        Dim attr As Integer
        attr = GetAttr(path)

        If attr And vbReadOnly Then Debug.Print "読み取り専用"
        If attr And vbHidden Then Debug.Print "隠しファイル"
        If attr And vbSystem Then Debug.Print "システム属性"
        If attr And vbDirectory Then Debug.Print "フォルダ"
        If attr And vbNormal Then Debug.Print "通常ファイル"
        If attr And vbArchive Then Debug.Print "アーカイブ属性"
    Else
        Debug.Print "ファイルが存在しません"
    End If
End Sub

▶ 出力結果(読み取り専用ファイルの場合)

読み取り専用
アーカイブ属性

基本的にアーカイブ属性がついている
属性を削除するツールやソフトで明示的に削除しない限り、
通常の操作(ファイル作成、上書き保存等)ではアーカイブ属性が付与された状態です。

フォルダかどうかを判定する

Sub sample()
    Dim target As String
    target = "C:\Temp"

    If Dir(target, vbDirectory) <> "" Then
        If GetAttr(target) And vbDirectory Then
            Debug.Print target & " はフォルダです"
        End If
    End If
End Sub

▶ 出力結果(読み取り専用ファイルの場合)

C:\Temp はフォルダです

⚠️注意

存在しないファイルやフォルダはエラー

引数に存在しないファイルやフォルダのパスを指定するとエラーになります。
事前にDir()などでファイルの存在確認をするようにしましょう。

Sub sample()
    Dim target As String
    Dim attr As Long

    target = "C:\Temp\notexist.txt"
    attr = GetAttr(target)
End Sub

▶ 出力結果
error_53.png

複数の属性を持つ場合は「加算値」で返される

たとえば、隠し属性 (2) と読み取り専用 (1) のファイルはGetAttr3を返します。
判定にはAnd演算を使います。

Sub Sample()
    Dim path As String
    Dim attr As Integer
    
    path = "C:\Temp\sample.txt"
    
    If Dir(path, vbHidden) <> "" Then
        attr = GetAttr(path)
        If (attr And vbReadOnly) <> 0 And (attr And vbHidden) <> 0 Then
            Debug.Print "読み取り専用+隠しファイル"
        End If
    End If
End Sub

▶ 出力結果

読み取り専用+隠しファイル

vbNormal は他の属性を一切持たない状態のみ

vbNormal = 0なので、他の属性が1つでもついていたら必ず0以外の値になります。
隠しや読み取り専用など、1つでも属性があるとvbNormalとは判定されません。

その他のVBA関数

【Excel VBA】VBAでよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?