[[20200616124543]] 『フォルダ名の取得』(momo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォルダ名の取得』(momo)

マクロでフォルダ名を取得しようと思います
取得はフォルダ名だけ、フォルダの中にフォルダがある場合も
取得したいです

ボタンをクリック
 ↓
フォルダパス取得
 ↓
フォルダ名を選択
 ↓
Excelに一覧を作成

まだ途中です
ここからどうしていいかわからず教えてください

 Sub パス_Click()

    Dim FN As String

    FName = GetDirectory(Range("B5").Value)

    If FN <> "Cancel" Then

       Range("B5").Value = FN

    End If

 End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 FileSystemObjectを使った再帰処理がよくつかわれます。
 参考HPです。

http://blog.jmiri.net/?p=1763
(OK) 2020/06/16(火) 13:14


 サンプルコードです。

 Dim FSO As Object
 Dim cnt As Long

Sub test()

 Dim oya As String
  cnt = 1
  Set FSO = CreateObject("Scripting.FileSystemObject")
  oya = "C:\Users\hoge\Desktop\1111" ’フォルダパス
  ActiveSheet.Cells(cnt, 1).Value = FSO.getfolder(oya).Name
  ActiveSheet.Cells(cnt, 2).Value = oya
  Call subfolget(FSO.getfolder(oya))
  Set FSO = Nothing
End Sub

Function subfolget(ByVal objfol As Object)

 Dim objsubfol As Object
  For Each objsubfol In objfol.subfolders
    cnt = cnt + 1
    ActiveSheet.Cells(cnt, 1).Value = objsubfol.Name 'サブフォルダ名
    ActiveSheet.Cells(cnt, 2).Value = objsubfol.Path 'サブフォルダパス
    Call subfolget(objsubfol)
   Next objsubfol
End Function
(OK) 2020/06/16(火) 13:29

GetDirectoryって何ですか? 自作のプロシジャなら、そこも書いてもらわないとです。

まず、Excelの標準だと、Dir関数を使う事になりますが、サブフォルダを対象とすると、再帰呼び出しとか考えなくてはいけないので、難しいです。 外部オブジェクトを利用する方法が幾つかありますが、標準ではないので、初心者脱却してもらわないといけません。

とりあえず、外部オブジェクトを使い、コマンドプロンプトのDIRコマンドを利用する例なぞ。
意味を理解するのは難しいかも知れませんが、再帰処理を考えなくて済むので、ロジックは理解しやすいと思っています。

 Sub test()
    Dim cPath As String
    Dim cFiles As Variant
    Dim i As Long

    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            cPath = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Cells.ClearContents

    cFiles = Split(CreateObject("WScript.Shell").Exec("CMD /C DIR /A:D/B/S """ & cPath & """").StdOut().ReadAll(), vbNewLine)
    Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A").Resize(UBound(cFiles), 1).Value = WorksheetFunction.Transpose(cFiles)
 End Sub
(???) 2020/06/16(火) 13:31

 ???さんのコードの中にすでに書かれてますが、フォルダを選択する方法です。

http://officetanaka.net/excel/vba/tips/tips39.htm

 ※私のコードは選択したフォルダではなく固定のフォルダになってますので、
 フォルダ指定部分は適宜変更してください。
(OK) 2020/06/16(火) 14:13

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.