• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のフォルダ内の名前や作成日等をリスト化する方法)

複数のフォルダ内の名前や作成日等をリスト化する方法

このQ&Aのポイント
  • フォルダ内の名前や作成日等をリスト化する方法をご紹介します。
  • マクロを使用すると、複数のフォルダ内の情報を一気にリスト化することができます。
  • フォルダのパスを入力して実行すると、別シートにフォルダ内の情報が表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.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 '-------------------------------------- 以上です。

doji4014
質問者

お礼

感動です! ありがとうございました。 急いでいましたが、これで間に合いそうです。 天才ですね!!

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

(処理内容) 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 '------------------------------------------- 以上です。  

doji4014
質問者

お礼

回答ありがとうございます。 早速走らせてみたところ、 「コンパイルエラー:ByRef引数の型が一致しません」 と出てしまいます。 エクセルSheet1のAセルにディレクトリー名は入力しました。 それ以外にどこかいじるところがあるのでしょうか。 初歩的なことかもしれませんが、 教えていただけないでしょうか。 よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

コードは随分きっちりした正統な書き方のコードの回答です。 それだけに初心者には要点が判りにくいかも。 この質問はどちらかと言うと、回答がVBSを使っているために、VBSの関連質問になっている。 これが本質問のケースに応用できないようでは、この質問の回答をもらっても場合によっては役立たないようにおもう。中身も含めてわかるように勉強すべきだ。 この関数は objFs.Getfolder(Sheets("sheet1").Range("a1")) Set objDir = objFs.Getfolder(trgDir) でtrgDirという引数の指定なければ前者、Sheet1のA1セルの値であるフォルダ名のフォルダを 指定あれば後者でtrgDirというフォルダを対象にしているから、 本質問の場合は、ここのtrgDirの指定を、>パスを複数個入力したシートの、次々のセルの値(をForNextなど使って)にずらして、回答全体を繰り返せば(この関数を使えば、この関数に飛んでくれば)仕舞い。 またfCntという書き出す行ポインターの変数は、作業中は連続したほうが良かろうから、関数の外に出して続けた方が良い。

doji4014
質問者

補足

回答ありがとうございます。 少しずつ勉強していきたいと思います。 現在、そのマクロ作成を急いでおり、 具体的にどこをどう直すかを教えていただけないでしょうか。 決して楽をしようとしている訳ではありませんが、 全くの初心者で、期日までに間に合わせなければならないので… また、フォルダ情報をエクセルに出力する際、 セルの幅を自動調節するため4行めに自分で Columns.AutoFit を挿入しましたが、この挿入場所は正しいでしょうか。 教えてください。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう