No1です。補足です。
> DOSコマンドのDIRのオプションだと
/A-ですが/A-A オプションだと AC属性のものもはねられてしまって一覧取得できませんでした
A属性を含む属性以外という考え方だったんですね。私はA属性のもののみはねるものと思ってました。ということで、これは使えそうにありません。
> エクセルのVBAですが
とりあえず以下のVBAでエクセルのシートにC属性のファイルを書き出せる感じですが、このVBAを含むエクセルファイルが保存されているフォルダを含み、それ以下のフォルダの全てのファイルの属性を調べるので、ファイル数が多いと正直とても時間がかかります。実行させるのはSub Test()です。
ただし、エクセル2003だと行が65536行までしかないためにC属性のファイルが65536個を超えるとエラーになります。そんなにC属性のファイルはないと思いますので、そのあたりの処理は割愛してます。また、先の回答にも書きましたが、C属性はVBAの仕様に含まれていないみたいなので、私の簡単なテストでは取得できましたが、実際のファイル群できちんともれなく取得できるかどうかは不明です。
下記のコードで1個も取得できなかった場合
MyFileName = Dir(MyPath & "\*.*", vbHidden)
のところを
MyFileName = Dir(MyPath & "\*.*")
にしてみてください。その場合、隠しファイルは検索外になってしまいます。
Sub Test()
Dim MyRow As Long
MyRow = 0
Range("A:A").ClearContents
Call Sample(ThisWorkbook.Path, MyRow)
End Sub
Sub Sample(ByVal MyPath As String, ByRef MyRow As Long)
Dim MyFileName As String, c As Object
Dim MyAttr As Integer
MyFileName = Dir(MyPath & "\*.*", vbHidden)
Do While MyFileName <> ""
MyAttr = GetAttr(MyPath & "\" & MyFileName)
If (MyAttr And 10240) <> 0 And MyAttr >= 10240 Or (MyAttr >= 2000 And MyAttr <= 2200) Then
MyRow = MyRow + 1
Cells(MyRow, 1) = MyPath & "\" & MyFileName
End If
MyFileName = Dir()
Loop
With CreateObject("Scripting.FileSystemObject")
For Each c In .GetFolder(MyPath).SubFolders
Call Sample(c.MyPath, MyRow)
Next c
End With
End Sub
お礼
大変にありがとうございます。 早速試してみます。 感謝いたします。