ドライブの中のファイル一覧(&サイズ等)を作成するVBAを教えてください!

このQ&Aのポイント
  • ドライブの中のファイル一覧を作成するVBAコードを教えてください。
  • VBA初心者ですが、ドライブ内のフォルダーに関する情報を一覧表にして表示したいです。
  • 特に、フォルダーの名前、サイズ、最終更新日を取得したいです。
回答を見る
  • ベストアンサー

ドライブの中のファイル一覧(&サイズ等)を作成するVBAを教えてください!!

ドライブの中フォルダーに関する情報を一覧表にして、どのフォルダーがドライブ容量を圧迫しているか調べたく、下記のVBAを書いてみたのですが、うまく走りません。 取得したい内容は、例えば、My Documentの中に入っている、Folder Name, Size, DateLastModifiedです。サブフォルダーがある場合は、さらにそのフォルダーの上記の情報も取得したいです。 *************************************************************** Sub FolderList() Dim fs As Object, fd As Object, f As Object Dim i As Integer Set fs = CreateObject("Scripting.FileSystemObject") Set fd = fs.GetFolder("C:\Documents and Settings\Ontario91") If f.Type Like "Folder*" Then i = i + 1 Cells(i, 1).Value = f.Name Cells(i, 2).Value = f.DatelastModified Cells(i, 3).Value = f.Size End If Range("A1").CurrentRegion.EntireColumn.AutoFit End Sub *************************************************************** VBA初心者なので、精通されている方たちには、かなり初歩的なコードだと思い、恥ずかしいのですが、質問させていただきます。お力添えよろしくお願い致します。

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

  • ベストアンサー
  • argument
  • ベストアンサー率63% (21/33)
回答No.1

はじめまして Ontario91 さん あぁ眠い、こんばんわというよりもうおはようございますなのでしょうか? まぁそんなことはどうでも良いですね。 タイトルは無視しますよ?あくまで質問内容を重視します。 さておき、この手の質問は巨万とある訳ですが検索しましたか? きっとこのQ&Aサイト内にも間違いなくあるとおもわれますがまぁ良いでしょう。 以下を回答とします。 標準モジュールにコピーしてください。 Public c As Integer Sub test() c = 1: Allfolder CreateObject("Scripting.FileSystemObject").GetFolder(CreateObject("WScript.Shell").SpecialFolders("MyDocuments")) End Sub Sub Allfolder(objFolder) For Each objSubFolder In objFolder.SubFolders Cells(c, 1).Value = objSubFolder.Name Cells(c, 2).Value = objSubFolder.DatelastModified Cells(c, 3).Value = objSubFolder.Size c = c + 1: Allfolder objSubFolder Next End Sub さぁ実行してみましたか?貴方のMyDocumentsがすべて列挙され名前、日付、サイズが表示されました。 質問条件は全て満たしました。はい、解決ですね。 追加処理・処理違い・補足等あればいってください。

Ontario91
質問者

お礼

ありがとうございました。 検索して、いくつか試してみましたが、思ったような結果が得られなかったため投稿してしまいました。今後は、検索結果をもっと試してから投稿します。

関連するQ&A

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。

  • VBAでExcelのセルの一覧からファイル名の変更が

    こんにちは。会社で大量のファイル名を変更していますが、Excelで一覧からを変更できれば能率的なので作っていますが、困っています。下記のものです。 Sub リネーム() Dim i As Long  Dim NEWファイル As String  Dim OLDファイル As String  Dim パス As String For i = 1 To Range("B65536").End(xlUp).Row パス = Cells(2, 1).Value OLDファイル = パス & Cells(i, 2).Value NEWファイル = パス & Cells(i, 3).Value If Dir(OLDファイル) <> "" Then Name OLDファイル As NEWファイル End If Next i End Sub ※A2にはC:\Documents and Settings\M.Co,\デスクトップ\リネームと入っています。B1には変更前の001.jpg、C1には変更するa-1.jpgとファイル名が入っています。実行してもファイル名は変更されません。エラーもでません。よろしくお願いします。

  • A列の値を元にフォルダを作成するVBAの質問です

    A列の値を元にフォルダを作成するVBAで 富士通の緑の本を参考にして作ってみたのですが、 うまく動作しません。 1.Sub フォルダ作成() 2. 3. Dim MyFSO As New FileSystemObject 4. Dim Folderpath As String 5. Dim i As Integer 6. 7. i = 1 8. 9. Do While Cells(i, 1).Value <> "" 10. 11. Folderpath = ThisWorkbook & "\Cells(i, 1).value" 12. 13. MyFSO.CreateFolder Path:=Folderpath 14. 15. i = i + 1 16. 17. Loop 18. 19.Set MyFSO = Nothing 20. 21.End Sub 目的の動作は 今のワークブックのある場所にSheet1のA列の1~データがなくなるまで、 そのセルの値のフォルダを作成する。 になります。 よろしくお願いします。

  • VBAでアクティブなファイルを参照して、ファイル一覧作成(サブフォルダ含む)

    VBAでアクティブなファイルのフォルダ(サブフォルダを含む)のファイル一覧を 作成したいと思っています。 以下のサイトを参考にして、パス、ファイル名を落とすまではできました。 http://okwave.jp/qa3544575.html === Sub test() Application.ScreenUpdating = False Sheet1.Cells.Clear Sheet1.Cells(1, 1) = "パス" Sheet1.Cells(1, 2) = "ファイル名" files "d:\", 2 Application.ScreenUpdating = True End Sub Sub files(path As String, ByRef row As Long) DoEvents Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim f As Object For Each f In fso.GetFolder(path).files Sheet1.Cells(row, 1) = path Sheet1.Cells(row, 2) = f.Name row = row + 1 Next For Each f In fso.GetFolder(path).SubFolders files f.path, row Next Set fso = Nothing End Sub === >files "d:\" の箇所を修正して、アクティブなブックを参照しようとしてみたのですが、 なかなか上手くいきません。 また、できれば *.xls などファイルの種類を指定したいのです。 filesearchを使用して組んだ時は 「AAA = ActiveWorkbook.path」「Filetype ~ 」 などでそれらの指定ができたのですが、上記に応用する事ができません。 どなたかご教示頂けますよう、よろしくお願いいたしますm(_ _)m

  • エクセルVBA:取得したファイル情報を別シートに貼るには・・・

    いつもお世話になっています。 今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。 指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。 sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか?? 作ったVBAはこんな感じです。 まず、フォルダのパスを取得しA2セルへ表示します。 Sub test2()  With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub Range("A2").Value = .SelectedItems(1) End With End Sub 次に、A2セルの値を使ってファイル名を取得しました。 Sub Test() Dim i As Long Dim pass As String pass = Range("A2").Value With Application.FileSearch .NewSearch .LookIn = pass .FileType = msoFileTypeAllFiles .SearchSubFolders = True If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + 1, 1) = .FoundFiles(i) Cells(i + 1, 3) = FileDateTime(.FoundFiles(i)) Next i End If End With End Sub です。 長くて申し訳ありません。よろしくお願いします。

  • VBA フォルダー内のファイル名・サイズの書き出し

    教えて下さい。 フォルダー名をダイアログを表示して選択する場合は、下記のコードを利用します。 Sub Test() Dim folderPath As Variant With Application.FileDialog(msoFileDialogFolderPicker) .Show folderPath = .SelectedItems(1) End With このfolderPathを利用して  フォルダー内のファイル名(B列)とサイズ(C列)をセルに書き出したいのです。 (ただし、ファイルサイズが2GBを超えるファイルも存在します。) -------------------------------------------------------------------- 下記が参考なりそうですが、フォルダー名の取得の仕方が  上記コードと異なるので思考が停止しています。 'Excel VBAでフォルダ内のファイルリストを作成 Private Sub ExGetFileList(strPath As String) Dim i As Long Dim tSfo As Object Dim tGf As Object Dim tFi As Object Dim tSub As Object Set tSfo = CreateObject("Scripting.FileSystemObject") Set tGf = tSfo.GetFolder(strPath) i = 4 For Each tFi In tGf.Files 'ファイル名 Cells(i, 2) = tFi.Name 'ファイルサイズ KByte Cells(i, 6) = Int(tFi.Size / 1024) i = i + 1 Next End Sub Private Sub CommandButton1_Click() ExGetFileList "e:\MyDir" End Sub どのように整合させれば良いですか ?

  • VBAでtextファイルを作成

    マクロ・VBA初心者です。 ご教授お願いします!! 経費精算のExcelデータを画像のような「"",]で区切ったテキストファイルを作成するマクロを作りたいと考えてます。 完成イメージ:マクロのボタンを押すとテキストファイルの形でフォルダに作成される。もしくは、マクロボタンを押すとテキストファイルの形で区切ったものが表示されるものを作りたいです。 *経費精算データに関してA列からX列まであり、集計データにより列にデータを埋めていく作業が入っております。なので、A列からX1列まででデータが記入されている範囲で集計できるようにしたいと考えております。 現在は、勉強しつつ組み立てた結果、 CSVのExcelファイルをフォルダの中に作成できるようになりました。 (コードは下記に記載します) ただ、テキストファイルが作れるコードができていないのが問題です。 このコードをどのように変えればよいのか? もしくは、別のコードで出来るようならば教えていただけると嬉しく思います。 宜しくお願いします。 ______________________________ 〈コード〉 Option Explicit Sub ExcelファイルCSV形式作成() '変数宣言 Dim filePath As String Dim i As Long Dim maxRow As Long Dim fileNo As Integer '初期値設定 filePath = ActiveWorkbook.Path & "\経費計算エクセル(CSV保存).csv" maxRow = Range("A1").End(xlDown).Row '最終行取得 fileNo = FreeFile 'FreeFile関数で使用可能なファイル番号取得 'ファイル開く Open filePath For Output As #fileNo '最終行までループ For i = 1 To maxRow '列の数は決め打ち Write #fileNo, Cells(i, 1), Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6); Cells(i, 7), Cells(i, 8), Cells(i, 9); Cells(i, 10), Cells(i, 11), Cells(i, 12); Cells(i, 13), Cells(i, 14), Cells(i, 15); Cells(i, 16), Cells(i, 17), Cells(i, 18); Cells(i, 19), Cells(i, 20), Cells(i, 21); Cells(i, 22), Cells(i, 23), Cells(i, 24) Next i 'ファイル閉じる Close #fileNo End Sub ______________________________________ 以上です。 本当に困ってます。よろしくお願します。

  • 休暇願をVBA作成し両面印刷する方法を教えてほしい

    VBAで休暇願を作成し印刷時は差し込み印刷方法でA4用紙に両面印刷したいのですが書き方が判りません。 マクロの内容を添付しますので両面印刷できるようにするにはどのように書けばよいのか教えてください。 下記のマクロで片面印刷は可能です。 Sub 印刷() Dim LastRow As Long Dim i As Long Dim myNo As Long If vbNo = MsgBox("印刷を開始していいですか?", vbYesNo) Then Exit Sub With Worksheets("名簿マスター") LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 1 To LastRow myNo = .Range("A" & i).Value With Worksheets("印刷シート") .Range("f7").Value = myNo .PrintOut Copies:=1, Collate:=True End With Next i End With MsgBox "印刷が終わりました" End Sub

  • エクセルVBAでPDFを1枚目のみ印刷したい

    下記のVBAに複数PDFが重なっている場合は、一枚目のみ印刷する文面を 挿入したいのですがうまくいきません Sub Test() Dim z As Object Dim i As Long Dim f, p As String Application.ScreenUpdating = False Set z = CreateObject("WScript.Shell") p = Application.ActivePrinter For i = 1 To Range("A1").End(xlDown).Row f = "h:\hozei\" & Cells(i, 1).Value & ".pdf" If Dir(f) <> "" Then z.Run ("AcroRd32.exe /t " & f) Else Cells(i, 2).Value = Cells(i, 1).Value Cells(i, 1).Value = "" End If Next i Set z = Nothing End Sub お忙しいところ申し訳ございません どなたかご教示願います。

  • フォルダー名一覧を作成するVBAでのエラー

    ここで教えていただいたフォルダー名一覧を作成するVBAがあります。 共有ドライブやMyDocumentなどのサブフォルダーは綺麗に階層別に抜き出してくれて助かっています。 ところが、Cドライブ(ローカルディスク)に対して実行すると必ず「実行時エラー70 書き込みできません」になります。 ワークシートにそれまで記入されたフォルダー名を見ると [Config.Msi] となっています。 ただエクスプローラで見てもConfig.Msiというフォルダーは見当たりません。 おそらく隠しフォルダーなのでしょう。 Cドライブを検索する場合、隠しフォルダーは広わなくてもいいので、エラーにならないようするにはどう直せばよいのでしょうか? エクセル2000です。 ' [参照設定]・Microsoft Scripting Runtime Option Explicit Private g_cntPATH As Long Sub SEARCH_FOLDER() Dim objFSO As FileSystemObject Dim strPATHNAME As String Dim myObj As Object Dim myDir As String Set myObj = CreateObject("Shell.Application"). _ BrowseForFolder(0, "フォルダを選択してください", 0) If myObj Is Nothing Then Exit Sub If myObj = "デスクトップ" Then myDir = CreateObject("WScript.Shell").SpecialFolders("Desktop") Else myDir = myObj.Items.Item.Path End If strPATHNAME = myDir Cells.ClearContents Set objFSO = New FileSystemObject Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME), 0, 0) Set objFSO = Nothing MsgBox "処理が完了しました。" & vbCr & vbCr & _ "フォルダ数=" & g_cntPATH & vbCr, vbInformation End Sub 'フォルダ単位のサブ処理(再帰動作,引数はFile-Object,行,カラム) Private Sub SEARCH_SUB_FOLDER(ByVal objPATH As Folder, ByRef GYO As Long, ByVal COL As Long) Dim objPATH2 As Folder g_cntPATH = g_cntPATH + 1 '参照フォルダ数を加算 GYO = GYO + 1 ' 行を加算 COL = COL + 1 ' カラムを加算 Cells(GYO, COL).Value = "[" & objPATH.Name & "]" For Each objPATH2 In objPATH.SubFolders 'サブフォルダを探索するループ処理 Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL) 'フォルダ単位のサブ処理(再帰呼び出し) ’←ここでエラー Next objPATH2 Set objPATH = Nothing ' 参照OBJECTを破棄 End Sub