ExcelのGetAttr関数でファイル属性を取得するVBAとその実行結果

GetAttrとは、ファイルの属性を取得する関数で、戻り値は属性が表す数値の合計で返るため、Andでビット演算し区別します。

戻り値の定数は下記になります。

定数 数値 内容
vbNormal 0 標準ファイル(既定値)
vbReadOnly 1 読み取り専用ファイル
vbHidden 2 隠しファイル
vbSystem 4 システム ファイル(Windowsのみ)
vbVolume 8 ボリューム ラベル(Windowsのみ)
vbDirectory 16 フォルダ
vbArchive 32 アーカイブ(Windowsのみ)
vbAlias 64 エイリアス ファイル(Macintoshのみ)

アーカイブとは、バックアップができていないというマークのようなもので、ファイル独自の性質などを表す意味ではありません。

ここではフォルダを選択し、その指定されたフォルダ内のファイル属性を調べています。
フォルダ選択のVBAは「フォルダー選択ダイアログ」を参照してください。




Homeに戻る > Excel ファイル操作のTipsへ


フォルダ内のファイル属性をGetAttr関数で取得する

フォルダ選択ダイアログからファイル属性を取得するVBAです。
フォルダ選択ダイアログからファイル属性を取得するVBA

・コマンドボタンのクリックイベント内に作成します。
・ファイル選択ダイアログについては、上記リンクのTipsのままです。
・ファイル選択ダイアログの返り値の最後に「¥」があるかどうか調べ、なければ「¥」を付けています。
・Dir関数をループし、フォルダ内のファイルを全て取り出しています。
・Dir関数の戻り値が"."か ".."の場合は親フォルダなので無視します。
・GetAttr(フォルダ名 + ファイル名)で属性を取得します。
・GetAttr関数の戻り値と定数でANDのBit演算を行い、その結果が定数と同じならば内容を保存しています。
・ファイル名と保存した結果をセルに表示します。
・表示セル位置はCELLS関数で下の行に移動させています。

Option Explicit

Function SelectFolder_FileDialog()
     If Application.FileDialog(msoFileDialogFolderPicker).Show Then
         SelectFolder_FileDialog = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
     Else
         SelectFolder_FileDialog = ""
     End If
End Function
 
Private Sub CommandButton1_Click()
    Dim sdir As String
    Dim sr As String
    Dim lr As Long
    Dim lret As Long
    Dim s1 As String
    
    sdir = SelectFolder_FileDialog
    
    sdir = "c:\test2"
    If Right(sdir, 1) <> "\" Then
        sdir = sdir + "\"
    End If
    
    Range("D3") = sdir

    lr = 6
    Range("B6:C2000").Clear
    
    sr = Dir(sdir, vbReadOnly + vbHidden + vbDirectory)

    Do Until sr = ""
        Select Case sr
            Case ".", ".."
            Case Else
                
                lret = GetAttr(sdir & sr)

                s1 = ""
                If (lret And vbNormal) = vbNormal Then
                    s1 = "通常ファイル"
                End If

                If (lret And vbReadOnly) = vbReadOnly Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = "読み取り専用ファイル"
                End If

                If (lret And vbHidden) = vbHidden Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = "隠しファイル"
                End If

                If (lret And vbSystem) = vbSystem Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = "システム ファイル"
                End If

                If (lret And vbDirectory) = vbDirectory Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = s1 & "フォルダ"
                End If

                If (lret And vbArchive) = vbArchive Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = s1 & "アーカイブ"
                End If

                If (lret And vbAlias) = vbAlias Then
                    If s1 <> "" Then
                        s1 = s1 & "、"
                    End If
                    s1 = s1 & "エイリアス ファイル"
                End If

                Cells(lr, 2) = sr
                Cells(lr, 3) = s1
                lr = lr + 1
        
        End Select

        sr = Dir
    Loop
End Sub

実行結果

実行シートです。
リボンの[開発]~コントロール グループ[挿入]から、ActiveXのコマンドボタンを配置します。
ボタンのプロパティでキャプションを「フォルダ選択」にします。
デザインモードの状態で、ボタンをダブルクリックしVBAを入力します。
コマンドボタンを配置したシート

実行結果のシートです。
D3セルに対象フォルダ名が表示されています。
B列にファイル名、C列にその属性が表示されています。

6行目はフォルダ、10行目は読み取り専用、13行目は隠しファイルと正常に取得できています。
実行結果のシート

Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved