- ベストアンサー
複数のフォルダ内の名前や作成日等をリスト化する方法
- フォルダ内の名前や作成日等をリスト化する方法をご紹介します。
- マクロを使用すると、複数のフォルダ内の情報を一気にリスト化することができます。
- フォルダのパスを入力して実行すると、別シートにフォルダ内の情報が表示されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答2、myRangeです。 変数宣言が抜けてますねぇ、、すみませぬ。。(^^;;; 下記、●●の一行を追加願います。 '--------------------------------------- Sub MakeFileList() Dim NewSheet As Worksheet '●●これを追加する Dim R As Long For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count)) NewSheet.Range("A1:D1") = Array("No", "作成日", "更新日", "ファイル名") Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0) NewSheet.Columns("A:D").AutoFit Next R MsgBox "終了しました" End Sub '-------------------------------------- 以上です。
その他の回答 (2)
- myRange
- ベストアンサー率71% (339/472)
(処理内容) Sheet1のA列にディレクトリー名が入力してあるものとする A1~A最終行までひとつずつ検索し、別シートに内容を表示する 別シートは【自動】で増やす 該当がない場合は、増やしたシートにその旨表示。 '-------------------------------------------------------- Sub MakeFileList() Dim R As Long For R = 1 To Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row Set NewSheet = Sheets.Add(after:=Sheets(Sheets.Count)) NewSheet.Range("A1:D1") = Array("No", "作成日", "更新日", "ファイル名") Call FileList(NewSheet, Sheets("Sheet1").Cells(R, "A").Value, 0) NewSheet.Columns("A:D").AutoFit Next R MsgBox "終了しました" End Sub '--------------------------------------------------------- Function FileList(NewSheet As Worksheet, trgDir As String, fCnt As Long) Dim objFs As Object Dim objDir As Object Dim objFile As Object Dim i As Long On Error GoTo ErrRtn Set objFs = CreateObject("Scripting.FileSystemObject") Set objDir = objFs.Getfolder(trgDir) Set objFile = objDir.Files With NewSheet For Each objFile In objDir.Files fCnt = fCnt + 1 .Cells(Fcnt, 1).Offset(1, 0) = Fcnt .Cells(Fcnt, 2).Offset(1, 0) = objFile.DateCreated .Cells(Fcnt, 3).Offset(1, 0) = objFile.DateLastModified .Cells(Fcnt, 4).Offset(1, 0) = objFile.Path Next objFile For Each objDir In objDir.SubFolders If objDir.Attributes <> 22 Then 'システムフォルダ除外 Call FileList(NewSheet, objDir.Path, fCnt) End If Next objDir End With Exit Function ErrRtn: NewSheet.Range("B4").Value = trgDir & " は無し!" NewSheet.Range("B4").Font.Size = 24 End Function '------------------------------------------- 以上です。
お礼
回答ありがとうございます。 早速走らせてみたところ、 「コンパイルエラー:ByRef引数の型が一致しません」 と出てしまいます。 エクセルSheet1のAセルにディレクトリー名は入力しました。 それ以外にどこかいじるところがあるのでしょうか。 初歩的なことかもしれませんが、 教えていただけないでしょうか。 よろしくお願いいたします。
- imogasi
- ベストアンサー率27% (4737/17069)
コードは随分きっちりした正統な書き方のコードの回答です。 それだけに初心者には要点が判りにくいかも。 この質問はどちらかと言うと、回答がVBSを使っているために、VBSの関連質問になっている。 これが本質問のケースに応用できないようでは、この質問の回答をもらっても場合によっては役立たないようにおもう。中身も含めてわかるように勉強すべきだ。 この関数は objFs.Getfolder(Sheets("sheet1").Range("a1")) Set objDir = objFs.Getfolder(trgDir) でtrgDirという引数の指定なければ前者、Sheet1のA1セルの値であるフォルダ名のフォルダを 指定あれば後者でtrgDirというフォルダを対象にしているから、 本質問の場合は、ここのtrgDirの指定を、>パスを複数個入力したシートの、次々のセルの値(をForNextなど使って)にずらして、回答全体を繰り返せば(この関数を使えば、この関数に飛んでくれば)仕舞い。 またfCntという書き出す行ポインターの変数は、作業中は連続したほうが良かろうから、関数の外に出して続けた方が良い。
補足
回答ありがとうございます。 少しずつ勉強していきたいと思います。 現在、そのマクロ作成を急いでおり、 具体的にどこをどう直すかを教えていただけないでしょうか。 決して楽をしようとしている訳ではありませんが、 全くの初心者で、期日までに間に合わせなければならないので… また、フォルダ情報をエクセルに出力する際、 セルの幅を自動調節するため4行めに自分で Columns.AutoFit を挿入しましたが、この挿入場所は正しいでしょうか。 教えてください。 よろしくお願いします。
お礼
感動です! ありがとうございました。 急いでいましたが、これで間に合いそうです。 天才ですね!!