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

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

HohoPapaの回答

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.9

・6行目から出力 ・D列にPDFファイルの作成日時を出力 を仕込みました。 Option Explicit '以下を参照設定 'Microsoft Scripting Runtime Dim BaseDir As String '親フォルダー名 Dim BorderDay As Date Dim RowCount As Long Sub sample()  With ThisWorkbook.Sheets("Sheet2")  'フォルダー名、日付格納シート   BaseDir = .Cells(1, 1).Value   BorderDay = .Cells(2, 1).Value  End With  ' 出力先シートをクリアー With ThisWorkbook.Sheets(1)   Range(.Rows(6), .Rows(Rows.Count)).ClearContents  End With  RowCount = 5  '6行目から出力  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  RowCount = RowCount + 1  With ThisWorkbook.Sheets("Sheet1")   '出力先シート   Range(.Cells(RowCount, 1), .Cells(RowCount, 3)).NumberFormatLocal = "@"   .Cells(RowCount, 4).NumberFormatLocal = "yyyy/m/d h:mm;@"      .Cells(RowCount, 1).Value = BaseDir & "\"   MidDir = Mid(f.path, Len(BaseDir) + 2, InStrRev(f.path, "\") - Len(BaseDir) - 1)   .Cells(RowCount, 2).Value = MidDir   FName = Mid(f.path, InStrRev(f.path, "\") + 1, 256)   .Cells(RowCount, 3).Value = FName   .Cells(RowCount, 4).Value = f.DateCreated   .Hyperlinks.Add Anchor:=.Cells(RowCount, 3), _     Address:=f.path, TextToDisplay:=FName  End With End Sub

akira0723
質問者

お礼

完璧!! 昨夜ご回答があったのを確認したので朝一で先ず確認。 結果が1行目から出力されていると思って、ここは自分で出来ると意気込んでコードを見たら丁寧な解説付きで6行目以下に設定されていました。 原因は前回の検索結果が残っていただけでした。流石の忖度に感心。 また前回言い忘れましたが、パスの区切りが親ホルダ+その他+品名の3区分は最高です。 B列で担当部署、顧客名、製品名がフィルタ出来ます。(この作業をAA列以降でセルの結合関数でやるつもりでした) 更に日付が付加されたことで一覧表の使い方が増えます。 これは作業の精度と効率の向上のみならず、作業の質が変わってきます。 重複削除や最新版管理にも可能性が出てきましたし、半年に一度ではなく月報単位で最新版管理ができます。(ボタンをクリックしてトイレに行って帰ってくる頃には完了) フォルダ、ファイルの増減管理、リンクの生き死にではなく、常に最新版管理出来ればメンテ不要と言うことになってきます。 現状は部署(フォルダ)毎に同じファイルが有ったり旧版と最新版が有ったりしているのを許容していますがこれも改善できる可能性が出て気ました。 お礼と賞賛の言葉が尽きませんが先ずはここまで。 貴方は何をなさっている方なの?(by 和田アキ子)

akira0723
質問者

補足

>ここは自分で出来る・・ は間違いで、削除範囲の6行目以降の設定との思い違いで、出力範囲の設定ではありません。 興奮気味でした。 このVBA凄くは凄くて他にも使えそうな気がします 当方の知識ではすぐに具体的な用途思いつきませんが。。。 恐らくその時にはまた改定をお願いすることになると思いますので宜しくお願い致します。

関連する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