• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで指定フォルダ内の増加ファイルの一覧を作る)

エクセルで指定フォルダ内の増加ファイルの一覧を作る

HohoPapaの回答

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.8

こんな感じでどうでしょうか。 Option Explicit '以下を参照設定 'Microsoft Scripting Runtime Dim BaseDir As String '親フォルダー名 Dim BorderDay As Date Dim FileCount As Long Sub sample()  With ThisWorkbook.Sheets("Sheet2")  'フォルダー名、日付格納シート   BaseDir = .Cells(1, 1).Value   BorderDay = .Cells(2, 1).Value  End With  ' 出力先シートをクリアー  With ThisWorkbook.Sheets("Sheet1")  '出力先シート   .Cells.ClearContents  End With  FileCount = 0  getFilesRecursive (BaseDir) End Sub Sub getFilesRecursive(path As String)  Dim FSO As FileSystemObject: Set FSO = New FileSystemObject  Dim objFolder As folder  Dim objFile As file  'フォルダーを個々に取得  For Each objFolder In FSO.GetFolder(path).SubFolders   getFilesRecursive objFolder.path  Next    'ファイルを個々に取得  For Each objFile In FSO.GetFolder(path).Files   If UCase(FSO.GetExtensionName(objFile.path)) = "PDF" Then    execute objFile   End If  Next End Sub '取得したファイルをリストアップ Sub execute(f As file)  Dim FNameParts As Variant  Dim PartsCount As Long  Dim MidDir As String  Dim FName As String  '作成日時が指定日以前のファイルは無視する  If f.DateCreated < BorderDay Then Exit Sub  FileCount = FileCount + 1    With ThisWorkbook.Sheets("Sheet1")   '出力先シート     Range(.Cells(FileCount, 1), .Cells(FileCount, 3)).NumberFormatLocal = "@"   .Cells(FileCount, 1).Value = BaseDir & "\"   MidDir = Mid(f.path, Len(BaseDir) + 2, InStrRev(f.path, "\") - Len(BaseDir) - 1)   .Cells(FileCount, 2).Value = MidDir   FName = Mid(f.path, InStrRev(f.path, "\") + 1, 256)   .Cells(FileCount, 3).Value = FName     .Hyperlinks.Add Anchor:=.Cells(FileCount, 3), _     Address:=f.path, TextToDisplay:=FName    End With End Sub

akira0723
質問者

お礼

朝から作業していて、D列にファイルの作成日を拾うことができればお願いします。 手数が多くなるようなら現状でも十分^充分です。 6行目以降へのデータ抽出も+2行程度で可能なら教えてください。 これは別シートのA5以降に参照でも良いので。 抽出しながら別シートへの転記で負荷が増えて時間がかかるような気がしたのですが、やってみたら時間は変わらない感じ(体感)でしたので このお礼へのご回答の有無にかかわらず、金曜日に一旦締め切って今回の新書式のリストの作成にかかります。 今回もほんとーーにありがとうございました。 少し古い流行語で申し訳ありませんが・・・ HohoPapa はんぱね~~~~

akira0723
質問者

補足

おはようございます。 朝一で確認してスッキリ!! & 最後のお願いです。 出力を6行目以降にするにはどこを書き換えれば良いのでしょう。 上の5行に項目や、オートフィルタを仕込んでしまえばファイルの増減監視・メンテではなく、毎回一定期間の最新版の更新で済んでしまうようにできることに気付きました。 Bookを目的別に複数用意(コピー)すれば、検索時間は現状で最大でも2分以内。 今までは、増減した結果を全項目の一覧表に反映していく作業をイメージしてのデータ抽出でしたが、今回の検索結果を見たら、この結果の上の行に使い方等とオートフィルタを見やすくすればそのまま一覧表として使えます。 実は昨夜、クリア範囲をA:Z列にして、前回のご回答の検索結果シートのAA列以降にいくつか細工したので、出力が6行目以降になれば、マクロボタンをクリックするだけで一覧表の60%以上がマクロで、後はVLOOKUP等の関数でホボ完成してしまうと思います。 今回も後知恵のオンパレードになってしまい本当に申し訳ありませんが、何卒宜しくお願い致します。 やはり当方のスキルが決定的に不足しているため発想が後追いになってしまいました。 ご容赦!!!!!!!!!!!!

関連するQ&A

  • エクセルvba. PDF保存 フォルダ内の順番

    エクセルVBAでPDFを作成すると、保存されたフォルダ内での順番が マクロ実行順から変わってしまいます。 Sheet1 顧客情報 Sheet2 請求書 Sheet1のA列の顧客名順でSheet2に差し込み保存した請求書PDFを フォルダ内でもA列の順番にする方法を教えてください。 よろしくお願いします。

  • excel vbaで今開いたばかりのファイルのパスを取得したい

    お世話になっております excelで「今開いたシート名までのパス」を取りたいのですが、方法がわかりません 現在 For FileNo = 1 To .FoundFiles.Count(あるフォルダの中にある) *************** For intNum = 1 To intSC(ファイルの中のシートを端から開いて作業する) *************** というようにfor nextであるファイルのあるシートを指定して作業するようになっています いったん、別のファイルを選択してからまたこの開いたシートに戻る必要があるため、この直前に開いたシートのパスが必要なのです 「ThisWorkbook.Path」などではコードが書いてあるファイルのパスになってしまいます どうか教えていただけると大変助かります 宜しくお願いします

  • Excel VBA でサブフォルダ含むファイル名取得

    勉強不足で申し訳ないですが、以下の処理をExcel VBAでやるにはどうしたらいいでしょうか? 仮に「C:\aaa」をルートフォルダとします。そのルートフォルダ下には「2008年」「2009年」など年の名前を付けたフォルダだけがあり、他に余計なファイル等はありません。そして、その「2008年」など年の名前のフォルダに、雑多なファイルが入っています。大雑把に図にすると、次のような感じです。 C:\aaa ├2008年 │ ├a1.pdf │ └a2.pdf │ └2009年   ├b5.pdf   └b6.pdf そして、添付の図のように、A列には「2008年」などサブフォルダ名が、B列には「a1」などファイル名が出力されるようにしたいのです。なお、 (1)B列のファイル名の拡張子は、消えれば最高ですが、別に消えなくてもいいです。 (2)B列のファイル名をクリックするとファイルが開けるハイパーリンクがあると、嬉しいです。別になくてもいいです。

  • 複数フォルダ内のファイル群をひとつに纏める

    Excel2003のVBA で、以下の作業を行いたいので宜しくご教示下さい。   サーバー上や自分のPC上にある、任意フォルダA直下には、   複数のフォルダがあり、その複数フォルダ内に多数のファイル(約3万個)が入っている。   そのファイル群を、任意フォルダAの直下に新しいフォルダを1つ作り、全てコピーし纏めたい。   当方の構想(希望)としては、   1.エクセルシート1に全ファイル名を書きだす。(行:フォルダ名、列:ファイル名)   2.同名ファイルの有無を判定し、有ればエクセルシート2にフォルダ名とファイル名を抽出する。     (同名ファイルは、エクセルシート2を確認し、手動で変更する)   3.同名ファイルが無ければ、新しいフォルダに全てコピーする。 コードを記載しご教示頂ければ助かります。 皆様よろしくお願い致します。

  • エクセルでフォルダ内のBookのセルの参照

    いつもお世話になっております。 決まったフォルダ内の複数のBook「個別情報(製品名)」のフルパスを別のBook「リスト」のA列に入れると、「個別情報(製品名)」のシート(規格)の指定のセルを「リスト」のシート(規格一覧)に行方向に引っ張ってくるようにしたいのですが。 1度に参照するシートは5-10枚。 参照するセル番地は決まっていて、多いと15個程度。 参照セルは「リスト」のシート(規格一覧)の最下行のセルに入るようにしたい。 閉じたままのBookのシートを指定して、セル参照が出来ることを少し前に知ったのですが、当方には難易度が高そうで躊躇していましたが最近コロナで時間が出来たのでチャレンジしてみようかと。 当方永遠のVBA初心者ですのでその辺もご配慮の上よろしくお願い致します。

  • VBAで特定のフォルダ内のエクセルファイルをPDF

    VBAで特定のフォルダ内のエクセルファイルをPDFに変換する作業しているのですが Filename:=ThisWorkbook.Path & "\" & Replace(f.Name, fs.GetExtensionName(f.Path), "pdf"), _ 出来上がったファイル名を コード_日付にしたく Filename:=ThisWorkbook.Path & "\" & ("コード") & Range("B9") & ("_") & Format(Now, "yyyymmdd") & ".pdf", _ に入力したのですがB9セルのコードが入りません。 どこが間違っているのでしょうか?

  • 大量のテキストファイルを一つのエクセルファイルに

    大量のテキストファイル(以下「テキスト」とします)を、そのテキストを保存しているフォルダ名がわかるように一つのエクセルファイルに書き込みたいと考えています。 例えば「A」というフォルダの中にフォルダ名「1」~「1000」の1000個のサブフォルダがあり、その1000個のフォルダの中にはそれぞれ3~4つのファイルが保存されています(ファイルの種類はバラバラ)。但し、1000個のフォルダには最低でも1つのテキストが必ず保存されており、そのテキストのファイル名はすべて同じです。これら同じファイル名の1000個のテキストを、保存されているフォルダ名がわかるように一つのエクセルファイルの一つのシートの上から順番に書き込みたいのです。 それぞれのテキストは、1行に1情報、改行が10~20ほど、ファイルサイズは1~2KBほどです。エクセルのバージョンは2010です。 書き込み方は、例えばエクセルファイルのSheet1のA列にフォルダパス等のフォルダ名がわかる情報を、B列にテキストの内容を書き込むといった感じで、簡単なデータベースのテーブルを作るイメージです。 上記を実現できる方法はありますでしょうか? もし何らかのプログラミングが必要であれば、当方ほぼ未経験ですので具体的に例示して頂けると大変ありがたいです。 よろしくお願い致します。

  • エクセルマクロで沢山のPDFをコピペしたい

    Windows7でエクセル2010を使っています。 アドビリーダーはXIです。 あるフォルダの中にあるPDFのファイル名の一覧がフルパスでエクセルにあります。 これはマクロで抽出しました。 PDFの内容はテキスト形式のみです。 そのファイル名の一覧を元に、次から次へPDFを開き、1ページ全てをコピーしてエクセルで新しいシートを作り、貼り付ける、という作業を連続で行いたいのです。 もしくは初めから一覧は作らなくても良かったのかもしれませんが、その都度違うフォルダを処理していくので、一覧にしてみました。 一度の作業で処理するのは一つのフォルダのみです。 色々試してみましたが、歯が立ちません。 どうぞお教え下さい。 同じような質問をしたばかりですが、回答が増えなくかったので、改めて質問させていただきました。

  • エクセルでフォルダとファイルを作りたい

    お世話になります。 エクセル2007で質問です。 下記のような表をエクセルで作り、A列の名称でフォルダを作り、 そのフォルダの中にすべて同じファイル名のテキストファイルを作り、 その内容をB列の文字としたいのですが、マクロなどでの作成方法を教えてくだい。 A列 B列 a1  ああああああ a2  いいいい a5  かかかかか いままで使っていたマクロはテキストのファイル名がすべてバラバラだった ので同じフォルダ内に書き出していましたが、変更があり同じファイル名で内容が 違うデータが必要となってしまいましたので、違う名称のフォルダの中に、 同じ名称のテキストデータを格納したいと思っています。 テキストデータの名称は何でもいいです。 作成するデータの数は決まっていなく、最大で1000くらいあります。 ぜひ、ご教授お願いします。

  • エクセルでフォルダまたはファイルを開くマクロですが、どのように改良すれ

    エクセルでフォルダまたはファイルを開くマクロですが、どのように改良すればよろしいでしょうか? 下記マクロは、エクセルシートのJ列のあるセルをダブルクリックすると、そのセルに記入された文字列を検索して、該当のフォルダまたは、写真が開きます。(エクセルファイルと写真は同フォルダに保存している場合のみ有効) 困っていることは、J列のセルと該当フォルダまたは、写真ファイルをリンクさせたいのですが、文字列が全て一致している時のみしか開かないことです。 D<デジカメ<商品名フォルダ<写真ファイル 例えば セルJ3の文字列がABCEで、フォルダ名またはファイル名がABCDEFであった場合、文字列ABCEを含む条件で、フォルダ名またはファイル名ABCDEFを開くように改良したいのですが、 また、エクセルファイルと写真ファイルの保存場所は、全く違うフォルダにしたいのですが、 エクセルファイルと写真ファイルは、別フォルダの場合、どのように検索先フォルダのパスを入れたら良いのでしょうか? マクロに詳しい方ご教授下さい。よろしくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myPath As String If Target.Cells(1, 1).Column <> 10 Then Exit Sub Cancel = True myPath = ThisWorkbook.Path & "\" & Target.Cells(1, 1).Text If Dir(myPath, vbDirectory) <> "" Then Shell "explorer.exe /e,/root," & myPath, vbNormalFocus Exit Sub End If myPath = Replace(LCase(myPath), ".jpg", "\" & Target.Cells(1, 1).Text) If Dir(myPath, vbNormal) <> "" Then Shell "rundll32.exe shimgvw.dll,ImageView_Fullscreen " & myPath, vbNormalFocus End If End Sub